2010-09-22 23 views
6

Kendi proje türümü IronStudio tabanlı eklemek istiyorum. Yani, Bir Visual Studio Paketini başka bir tanesine göre oluşturma

  • Ben yeni Visual Studio Paketi oluşturdu
  • sonra, kaynağını indirilen ve the latest version of IronPython derlenmiş.
  • Templates\Projects\MyProject klasörlerini ekledim ve buna bir dosya ekledim ve "VSIX'e dahil et" özelliğini true olarak ayarlayın.

Sonra IronStudio en PythonProjectPackage yerine elde edilecek ana Paket sınıfı modifiye ve ProvideProjectFactory özelliğini ayarlayın:

[ProvideProjectFactory(
    typeof(PythonProjectFactory), 
    "Django Project", 
    "Django Project Files (*.myproj);*.myproj", 
    "myproj", "myproj", 
    @"Templates\Projects\MyProject", 
    LanguageVsTemplate="MyProject")] 
public sealed class MyPackage : PythonProjectPackage 

Ve ister koştu. Ancak MyProject proje şablonlarında görünmüyor. Neden olmasın?

oluşturulan .pkgdef dosya şuna benzer:

[$RootKey$\InstalledProducts\VSPackage3Package] 
@="#110" 
"Package"="{5cd7435c-7461-459f-80bc-c0c79e9d462f}" 
"PID"="1.0" 
"ProductDetails"="#112" 
"LogoID"="#400" 
[$RootKey$\Packages\{5cd7435c-7461-459f-80bc-c0c79e9d462f}] 
@="Microsoft.VSPackage3.VSPackage3Package, VSPackage3, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a4f1577d825253f8" 
"InprocServer32"="$WinDir$\SYSTEM32\MSCOREE.DLL" 
"Class"="Microsoft.VSPackage3.VSPackage3Package" 
"CodeBase"="$PackageFolder$\VSPackage3.dll" 
[$RootKey$\Editors\{888888c4-36f9-4453-90aa-29fa4d2e5706}] 
"Package"="{5cd7435c-7461-459f-80bc-c0c79e9d462f}" 
[$RootKey$\Editors\{888888c4-36f9-4453-90aa-29fa4d2e5706}\Extensions] 
"py"=dword:00000020 
[$RootKey$\Editors\{888888c4-36f9-4453-90aa-29fa4d2e5706}\LogicalViews] 
"{7651a701-06e5-11d1-8ebd-00a0c90f26ea}"="" 
[$RootKey$\Editors\{888888c4-36f9-4453-90aa-29fa4d2e5706}\LogicalViews] 
"{7651a702-06e5-11d1-8ebd-00a0c90f26ea}"="" 
[$RootKey$\Editors\{888888c4-36f9-4453-90aa-29fa4d2e5706}\LogicalViews] 
"{7651a703-06e5-11d1-8ebd-00a0c90f26ea}"="" 
[$RootKey$\CLSID\{888888fd-3c4a-40da-aefb-5ac10f5e8b30}] 
@="Microsoft.IronPythonTools.Project.PythonGeneralPropertyPage" 
"InprocServer32"="$WinDir$\SYSTEM32\MSCOREE.DLL" 
"Class"="Microsoft.IronPythonTools.Project.PythonGeneralPropertyPage" 
"CodeBase"="$PackageFolder$\VSPackage3.dll" 
"ThreadingModel"="Both" 
[$RootKey$\Projects\{888888a0-9f3d-457c-b088-3a5042f75d52}] 
@="PythonProjectFactory" 
"DisplayName"="My Project" 
"DisplayProjectFileExtensions"="My Project Files (*.myproj);*.myproj" 
"Package"="{5cd7435c-7461-459f-80bc-c0c79e9d462f}" 
"DefaultProjectExtension"="myproj" 
"PossibleProjectExtensions"="myproj" 
"ProjectTemplatesDir"="$PackageFolder$\Templates\Projects\MyProject" 
"Language(VsTemplate)"="MyProject" 
[$RootKey$\NewProjectTemplates\TemplateDirs\{5cd7435c-7461-459f-80bc-c0c79e9d462f}\/1] 
@="My Project" 
"SortPriority"=dword:00000064 
"TemplatesDir"="$PackageFolder$\Templates\Projects\MyProject" 
[$RootKey$\Projects\{888888a0-9f3d-457c-b088-3a5042f75d52}] 
@="PythonProjectFactory" 
"DisplayName"="IronPython" 
"DisplayProjectFileExtensions"="IronPython Project Files (*.pyproj);*.pyproj" 
"Package"="{5cd7435c-7461-459f-80bc-c0c79e9d462f}" 
"DefaultProjectExtension"="pyproj" 
"PossibleProjectExtensions"="pyproj" 
"ProjectTemplatesDir"="$PackageFolder$\.\NullPath" 
"Language(VsTemplate)"="IronPython" 
[$RootKey$\NewProjectTemplates\TemplateDirs\{5cd7435c-7461-459f-80bc-c0c79e9d462f}\/1] 
@="IronPython" 
"SortPriority"=dword:00000064 
"TemplatesDir"="$PackageFolder$\.\NullPath" 
[$RootKey$\Services\{b98e41c4-581e-3532-beee-06829b683d39}] 
@="{5cd7435c-7461-459f-80bc-c0c79e9d462f}" 
"Name"="IPythonStarter" 

yüzden sadece (Yeni Öğe Ekle iletişim gibi) bazı işlevleri geçersiz kılma başlayabilir ve çalışır çıplak kemikleri almak istiyorum.

+0

Sadece "PythonProjectFactory" nin orada iki kez göründüğünü fark ettiniz. Muhtemelen olması gerektiği gibi değil. – mpen

+0

Gerçekten de - örneğin, örn. Yukarıdaki GUID, bununla ilgili daha fazla bilgi için [yanıtım] bölümüne bakın (http://stackoverflow.com/q/3766065#3834459). –

cevap

1

Bu stackoverflow gönderme yararlı olabilir: VS2010: VSIX installation doesn't deploy item templates inside it

bu özel proje şablonları yaratılması etrafında şey eksik olmadığını görmek için deneyin aradığınız değil buysa, bunu nerede inanıyoruz " "bağlantısını eksik:

VS 2008 için

Bu yardımcı olur

+1

Bu linklerin çoğu yeni proje şablonlarının nasıl oluşturulacağını anlatıyorlar ... Bunu zaten yaptım, bir parça kek. Bundan daha fazla güce ihtiyacım var, yapı ve çalıştırma işlemini değiştirmem ve sağ tıklama menüsüne öğeler eklemem gerekiyor. Bunun için bir VSPackage oluşturmam gerektiğinden eminim. Ben de bunun nasıl yapılacağını anladım (http://stackoverflow.com/questions/3713503/how-to-create-a-new-project-type-in-vs2010/3713769#3713769), mücadele ettiğim kısım özel olarak, IronPython'u genişletiyor. İlk bağlantınız biraz daha ilgili (doğru yönde en az bir adım olduğu gibi), – mpen

+0

ama cevap temelde "tekrar bakın", ki ... ... birkaç kez yaptım. – mpen

+0

Bir "yeni öğe şablonu" uygulamak istediğim daha büyük özelliklerden biridir ... bir dosya eklemesi, diğerlerini değiştirmesi gerekmesi dışında, biraz daha karmaşıktır. Bu ve bağlam farkında olmak ("vurgulanan işlev için yeni bir görünüm şablonu oluştur"). – mpen

0

$ PackageFolder $. \ NullPath bununla ilgili bir şey olabilir.

+0

Bu dosya otomatik olarak oluşturuldu Eminim, bununla birlikte birçok kusur var, ancak bu dosyayı doğrudan düzenleyemediğimi görmek gerçekten işe yaramıyor. – mpen

5

Güncelleme: bir kez daha benim ilk analiz Okuma

gerekli bazı bileşenlerin eksik olduğunu benim izlenim artırır (örneğin özel bir ProjectFactory) ve/veya yanlış bir şekilde kablolu - ProvideProjectFactoryAttribute Class MSDN belgelerinden:

ProvideProjectFactoryAttribute bir paket proje fabrikası sağladığını beyan eder.

Ve dahası:

bir VSPackage bir proje fabrikası sağladığını bulduğu takdirde, fabrika oluşturmak ve Paket türetilmiş sınıf başlatma yönteminde Visual Studio bunu sunmalıdır.

Paketin PythonProjectFactory sağlamak bildirerek, ancak (muhtemelen) daha çok IronPython paket tarafından sunulan, VS bunu sunmamaktadır. Buna karşılık, ProvideProjectFactory öznitelik listesi içinde, PythonProjectFactory tarafından VS tarafından istendiğinde bilmeyecek argümanlar sağlıyorsunuz.

Sonuç olarak, en azından atıfta bulunarak kendinize adanmış bir ProjectFactory belirtmelisiniz, sınıfları buna göre bağlayın ve bunun aşağıda açıklanan konularla ilgili olarak nasıl göründüğünü görün.


Başlangıç ​​analizi:

ilk bakışta burada çeşitli sorunlar ortaya çıkmaktadır - Bunu nasıl herhangi öğretici takip ettim? Durumda, arama motorları aracılığıyla kolayca keşfedilebilenlerin bir kısmının hala geçerliliğini yitirdiğini lütfen unutmayın. Her iki durumda da, sonuçlarınızı VS 2010'un MSDN belgelerinden Walkthrough: Part 1 - Creating a Basic Project System ile karşılaştırmaya ve/veya karşılaştırmaya çalışacağım; Bu sorunun bile sayfanın alt kısmındaki Topluluk İçeriği bölümüne göre biraz eski olduğunu iddia ettiğini lütfen unutmayın. Zaten fark

  • yinelenen parçası GUID ile başlayan o: İşte

    Ben daha fazla bilgi almaya anında kılavuzu inceleyerek karşılaştırarak, sen sunmak kod verilmiş kendim bakmak istiyorum ne PythonProjectFactory üzerinde bir anlam ifade etmiyor - bu aslında iki paketi aynı anda kaydetmeye çalışıyor. Bu, sözdizimsel olarak tümüyle izin verilse bile (ki bundan şüpheliyim), her ikisi de aynı GUID'de kayıtlı olmasından dolayı çalışamaz [ numaralı bölümdeki örnek dosya ile çapraz kontrol Şablon kaydının incelenmesi onaylar Bu şüphenin, beklendiği gibi sadece böyle bir parçası vardır].
    • söz konusu GUID (ilgili kaynak kodu uyarınca) PythonProjectFactory tanımlayan bir, bu konuda daha fazla bilgi için aşağıya bakın olduğuna dikkat edin. .pkgdef Verilen
     [Guid(PythonConstants.ProjectFactoryGuid)] 
         public class PythonProjectFactory : ProjectFactory { 
    
  • bir bu çoğaltılması/ihlali kaynaklanıyor nerede sonraki soru dosyası oluşturulur. Iki oluşturulan eserler aynı GUID ile bittiğinde, kaynaklarda ilgili tanım genellikle kopya kopyalama nedeniyle, genellikle & kopya çoğaltma kopyalanır. Sonuç olarak, {5cd7435c-7461-459f-80bc-c0c79e9d462f}'un amaçlandığı şekilde tanımlanıp tanımlanıp doğrulanmadığını doğrulamanız gerekir, ancak bunun için bir veya iki neden daha olabilir, aşağıya bakın.

  • bir Package class ihtiyaçları GUID tarafından tespit edilmesi ve VS sihirbazı Guids.cs bazı önceden oluşturur ve referanslar buna göre sınıf tanımının, ancak, için fragmanında eksik aşağıdaki [çapraz örnek fragmanı ile kontrol proje şablonu kaydolmak için bölüm yılında] de bu eksiklik doğruluyor:

[Guid(GuidList.guidMyPackagePkgString)] 
    public sealed class MyPackage : Package 
  • Aynı şekilde bu ikincisi Visual Studio proje şablonu klasörünün konumunu söyler çünkü MyPackage hala referans PythonProjectFactoryPythonProjectPackage uzak ama yerine (özel GUID dahil) yanı MyFactory sağlamak yerine türetmek için yanlış görünmektedir [bölüm Oluşturma bkz iskelet Proje Fabrikası]:

    • w özetlendiği gibi fabrika (çok özel bir GUID olmalıdır çünkü iyi basitçe olasılıkla sadece gerekli olduğu miras, temel sınıf PythonProjectFactory tüm işlevselliği yeniden mümkün olabilir iken belirtilen veriyi doğru şekilde bağlamak için

  • Muhtemel ilgisiz , ama yine de şüpheli Package class tanım Django Projesi Files (* .myproj) belirtir olarak iki kod blokları, ilgili kalmamasıdır;. * Myproj, henüz sonuç Proje Dosyalarım (* .myproj); * .proproj.

    • Şans eseri farklı yapılardan karıştırdınız mı, yoksa bu gerçekten temiz bir sonuç mu? şans

iyi!

+0

Bu cevap, bazı haklara sahipmiş gibi geliyor ama ben gitmek için çok yorgunum. Şu andan itibaren, biraz zamanım olduğunda bunu araştırmak gerekecek. – mpen