2011-07-26 18 views
6

Stworzyłem niestandardowy pakiet językowy, który rozszerza ProjectPackage. Mogę poprawnie utworzyć nowy projekt. Chciałbym móc dodawać nowe pliki źródłowe do projektu za pomocą elementu menu Dodaj-> Nowy element ... (Ctrl + Shift + A). Jednak po kliknięciu tego w tej chwili lista dostępnych szablonów jest pusta. Chciałbym dodać własny szablon niestandardowy do menu dostępnych szablonów dla tego typu projektu. Czy jest jakaś dokumentacja do osiągnięcia tego? Jedynymi wzmiankami, które widziałem były hacki rejestru, ale musi być sposób na programowe myślę.VS2010 MPF: Wypełnianie listy "Dodaj-> Nowy element ..." dla niestandardowego projektu

Czy istnieje konkretna metoda, którą mogę przesłonić, aby wypełnić listę? Czy naprawdę muszę utworzyć szablon, czy mogę po prostu pokazać "nazwę szablonu", "ikonę" i podać poprawne rozszerzenie pliku (pliki powinny być puste po utworzeniu, więc myślę, że szablon jest w dużej mierze zmarnowany na to, co chcę do zrobienia).

Oto ścieżka, którą do tej pory podróżowałem. Pomyślałem, że mógłbym ustawić mój typ projektu i GUID w moim niestandardowym pliku .vproj (.vproj jest rozszerzeniem pliku, pod którym zarejestrowany jest mój projekt niestandardowy). Pomyślałem, że mogę szybko stworzyć szablon przedmiotu z tym samym ProjectType co mój plik .vproj.

<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> 

Niestety, ten szablon nie pojawi się w ogóle, mimo że podaję go w VSIX i kopiować je do katalogu wyjściowego. Jeśli umieściłbym ten szablon w tym samym folderze co mój .vproj, pojawi się jako szablon do tworzenia nowego projektu (źle!) I nadal nie pojawi się na mojej nowej liście przedmiotów. To wszystko może wynikać z faktu, że nie używam VSTemplate do tworzenia mojego projektu. Zamiast tego używam [ProvideProjectFactoryAttribute], aby VS2010 wiedział gdzie znajduje się mój plik vproj, i użyje pliku vproj (który, jak sądzę, mógłbyś nazwać szablonem, ale nie jest to VSTemplate, to Projekt), aby oprzeć nowe projekt off of.

To jest miejsce, w którym jestem na razie i nadal próbuję nowych rzeczy. Mam nadzieję, że ktoś może znaleźć odpowiedź, której szukam. Dzięki,

Giawa

Odpowiedz

4

Po dużo czytania i pracy, oto moja odpowiedź:

używać plików vstemplate dla projektu i elementów, a skompilować je jako vstemplate (nie kopiować do wyjścia, nie dołącz do VSIX, w przeciwieństwie do tego, co sugeruje Microsoft Walkthrough). Kompilator zapakuje każdy element i szablon projektu do własnego pliku zip. Teraz musisz powiedzieć vixmanifest, gdzie znajdują się te pliki. Domyślne katalogi projektów i elementów to odpowiednio ProjectTemplates i ItemTemplates. Dodaj je do vsixmanifest tak:

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

Teraz trzeba też dodać kilka właściwości do pliku .csproj że pakiet vsix jest zbudowany w Właściwości te można prawdopodobnie dodane przez jakiś pokrętny sposób, ale najłatwiej. jest po prostu upuszczać je bezpośrednio w pliku .csproj.

<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> 

Będzie to teraz zawierać pliki zip do projektu, a przy odrobinie szczęścia będziesz mieć teraz projekty i elementy, które są poprawnie połączone ze sobą.

Na szczęście istnieje dość obszerna dokumentacja dla szablonów przedmiotów/projektów. Po prostu zajęło mi trochę czasu, zanim zrozumiałem, że jest to właściwy sposób postępowania.Powodzenia,

Giawa

+0

To było dla mnie niezwykle pomocne. Brakującym elementem było dodanie elementów do manifestu. Nie mogłem znaleźć żadnego odniesienia o potrzebie tego. Gdybym mógł dać ci więcej niż jeden głos, zrobiłbym to! Żałuję, że nie zmarnowałem tylu godzin gmerania, zanim znalazłem to ... – MarkPflug

+0

Również zdałem sobie sprawę, po wykonaniu [opisu] (https://msdn.microsoft.com/en-us/library/cc512961%28v= VS.100% 29.aspx? F = 255 & MSPPError = -2147217396), po kliknięciu prawym przyciskiem myszy na węźle projektu, w menu nie ma polecenia "usuń" lub "usuń". –

0

Wszystkie te czynności mogą być wykonywane automatycznie w Visual Studio:

najpierw utworzyć szablon elementu w odrębnym projekcie (można to zrobić przez File > Export template). Możesz dostosować ten szablon edytując plik .vstemplate.

Po masz .zip plików, przeciągnij i upuść go do głównego VSPackage roztworze i wykonaj następujące czynności:

  1. Kliknij .vsixmanifest plików.
  2. Kliknij na Assets > New.
  3. Zestaw Type do Microsoft.VisualStudio.ItemTemplate (Szablon przedmiotu).
  4. Ustaw Source na File on filesystem.
  5. Ustaw Path na plik szablonu pozycji .zip.
  6. Przebuduj rozwiązanie.

Uwaga: używałem Visual Studio 2013.