2011-07-26 42 views
6

ProjectPackage'ı genişleten özel bir dil paketi oluşturdum. Yeni projeyi doğru şekilde oluşturabilirim. Add -> Yeni Öğe ... (Ctrl + Shift + A) menü öğesini kullanarak projeye yeni kaynak dosyaları ekleyebilmek istiyorum. Ancak, şu anda bunu tıklattığımda, kullanılabilir şablonların listesi boş. Bu proje türü için mevcut şablonlar menüsüne kendi özel şablonumu eklemek istiyorum. Bunu başarmak için bazı belgeler var mı? Gördüğüm tek şey kayıt defteri hackleriydi, ama programatik olarak düşünebilmemin bir yolu olmalı.VS2010 MPF: Özel bir proje için 'Add-> New Item ...' listesi oluşturuluyor

Listeyi doldurmak için geçersiz kılmama özel bir yöntem var mı? Bir şablon yapmam gerekiyor mu, yoksa sadece 'şablon adı', 'simge' gösterebilir ve doğru dosya uzantısını sağlayabilir miyim (dosyalar oluşturulduğunda boş olmalıdır, bu yüzden bir şablonun ne istediğimde büyük ölçüde boşa gittiğini düşünüyorum yapmak).

Şu ana kadar gittiğim yol. Proje türümü ve GUID'yi özel .vproj dosyasımda ayarlayabileceğimi düşündüm (.vproj, özel projemin altında kayıtlı olduğu dosya uzantısıdır). .vproj dosyasıyla aynı ProjectType ile hızlı bir öğe şablonu oluşturabileceğimi düşündüm.

<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item"> 
    <TemplateData> 
    <Icon>VerilogSource.ico</Icon> 
    <DefaultName>module.v</DefaultName> 
    <Name>Basic Verilog Module</Name> 
    <Description> 
     A basic Verilog module for quickly adding new files to the project. 
    </Description> 
    <ProjectType>VerilogProject</ProjectType> 
    </TemplateData> 
    <TemplateContent> 
    <ProjectItem TargetFileName="$fileinputname$.v" 
     ReplaceParameters="true">module.v</ProjectItem> 
    </TemplateContent> 
</VSTemplate> 

Ne yazık ki, bu şablon ben VSIX bunu ekledik rağmen hiç kadar ve çıkış dizinine kopyalanan etmez. Bu şablonu .vproj ile aynı klasöre koyarsam, yeni bir proje (yanlış!) Oluşturmak için bir şablon olarak görünecek ve yine de yeni öğeler listemde görünmeyecek. Bu, projemi oluşturmak için bir VSTemplate kullanmadığım gerçeğinden kaynaklanabilir. Bunun yerine, VS2010'un vproj dosyanızın nerede olduğunu bilmesini sağlamak için [ProvideProjectFactoryAttribute] 'i kullanıyorum ve vproj dosyasını kullanacağım (bir şablon diyebilirim ama sanırım bir VSTemplate, bu bir Proje). kapalı proje.

Şu ana kadar buradayım ve yeni şeyler denemeye devam ediyorum. Birisinin aradığım cevaba sahip olabileceğini umuyorum. Teşekkürler,

Giawa okuma ve işin bir sürü sonra

cevap

4

, burada cevabım bu: (çıkışına projeniz ve öğeler için

kullanın vstemplate dosyaları ve vstemplate olarak derlemek kopyalamazsanız, gitme Microsoft Walkthrough önerilerinin aksine, VSIX ile dahil edin. Derleyici, her bir öğeyi ve proje şablonunu kendi zip dosyasına paketler. Şimdi, vsixmanifest'e bu dosyaların nerede olduğunu söylemelisin. Projeler ve öğeler için varsayılan dizinler sırasıyla ProjectTemplates ve ItemTemplates'lerdir. böylece gibi vsixmanifest bunları ekleyin: Şimdi

<Content> 
    <VsPackage>|%CurrentProject%;PkgdefProjectOutputGroup|</VsPackage> 
    <ProjectTemplate>ProjectTemplates</ProjectTemplate> 
    <ItemTemplate>ItemTemplates</ItemTemplate> 
    </Content> 

, ayrıca vsix paket inşa edilmiştir senin .Csproj dosyasına bazı özellikler eklemeniz gerekir Bu özellikler muhtemelen bazı dolambaçlı yöntemle eklendi ancak en kolay yapılabilir. onları doğrudan .csproj dosyasında bırakmaktır.

<PropertyGroup> 
    <GetVsixSourceItemsDependsOn>$(GetVsixSourceItemsDependsOn);GetVsixTemplateItems</GetVsixSourceItemsDependsOn> 
    </PropertyGroup> 
    <Target Name="GetVsixTemplateItems" DependsOnTargets="ZipProjects;ZipItems"> 
    <ItemGroup> 
     <VSIXSourceItem Include="@(IntermediateZipItem)"> 
     <VSIXSubPath>ItemTemplates\%(IntermediateZipItem.Language)\%(IntermediateZipItem.OutputSubPath)\%(IntermediateZipItem.Culture)</VSIXSubPath> 
     </VSIXSourceItem> 
     <VSIXSourceItem Include="@(IntermediateZipProject)"> 
     <VSIXSubPath>ProjectTemplates\%(IntermediateZipProject.Language)\%(IntermediateZipProject.OutputSubPath)\%(IntermediateZipProject.Culture)</VSIXSubPath> 
     </VSIXSourceItem> 
    </ItemGroup> 
    </Target> 

Bu şimdi projenize zip dosyaları içerir ve herhangi bir şans ile, artık proje ve doğru bir şekilde birbirine bağlanmıştır öğe bulunur.

Neyse ki, öğe/proje şablonları için orada oldukça fazla belge var. Gitmenin doğru yolu olduğunun farkına varmam biraz zaman aldı.İyi şanslar,

Giawa

+0

Bu benim için çok muazzam yardımcı oldu. Eksik bileşen, öğeleri manifest'e ekliyordu. Bunu yapmakla ilgili bir referans bulamadım. Sana bir oy verebilseydim oy kullanırdım! Bunu keşfeden önce saatlerce uğraşmamayı dilemedim ... – MarkPflug

+0

Ayrıca, [Walkthrough] 'u izledikten sonra anladım (https://msdn.microsoft.com/en-us/library/cc512961%28v= VS.100% 29.aspx? F = 255 & MSPPError = -2147217396), bir proje düğümüne sağ tıklandığında, menüde 'delete' veya' remove' komutu yoktur. –

0

Bütün bu adımlar Visual Studio içinde otomatik olarak yapılabilir:

İlk (eğer File > Export template bunu yapabilirsiniz) ayrı bir projede bir öğe şablonu oluşturun. Bu şablonu .vstemplate dosyasını düzenleyerek özelleştirebilirsiniz.

Bir .zip dosya sürükleyip var ve ana VSPackage çözüme bırakın ve aşağıdakileri yapın sonra:

  1. tıklayın dosyası .vsixmanifest üzerinde.
  2. Assets > New'a tıklayın.
  3. Type için Microsoft.VisualStudio.ItemTemplate (Öğe Şablonu) öğesini ayarlayın.
  4. Source değerini File on filesystem olarak ayarlayın.
  5. Path öğelerini, öğe şablonunuzu .zip dosyanıza ayarlayın. Çözelti
  6. Yeniden oluştur.

Not: Ben Visual Studio 2013 kullanıyordu.