2013-07-12 11 views
5

śledzę ten post o tym, jak zbudować VSIX projekt, który będzie dodać kilka niestandardowych typów projektów MVC:VSIX z szablonów projektów oraz Nuget Pakiety

http://www.asp.net/mvc/tutorials/mvc-4/custom-mvc-templates

Chcę również zawierać dodatkowe pakiety Nuget , więc podążałem za this page from Nuget, ale wydaje mi się, że jest to dla VS2010 i pracuję w 2012.

Mam budynek projektu i wszystko działa brzoskwiniowo na mojej maszynie. Instalacja działa, pojawia się nowy typ projektu, a kiedy tworzę nowy projekt tego typu, wszystko działa idealnie.

Jednak, gdy wysyłam instalator do współpracownika, wszystko się psuje. Instalator działa, widzi nowy typ projektu, ale podczas tworzenia projektu otrzymuje komunikaty o błędach dotyczące niemożności zainstalowania żadnego z pakietów w węźle rozszerzenia. Potwierdziłem, że identyfikator produktu rozszerzenia jest poprawny (celowo zniekształciłem go w pliku .vstemplate podczas testowania i dało zupełnie inny błąd). Dodałem paczki do manifestu rozszerzenia, ale nie ma to znaczenia. Potwierdziłem również, że pliki .nupkg zostaną wdrożone w% ProgramFiles (x86)% \ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ Extensions.

Wszelkie sugestie dotyczące tego, co należy zrobić? Sekcja .vstemplate

Niestandardowe Projektu

<WizardExtension> 
    <Assembly>NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Assembly> 
    <FullClassName>NuGet.VisualStudio.TemplateWizard</FullClassName> 
</WizardExtension> 
<WizardData> 
    <packages repository="registry" keyName="AspNetMvc4VS11" isPreunzipped="true"> 
     <package id="EntityFramework" version="5.0.0" skipAssemblyReferences="true" /> 
     <package id="jQuery" version="1.8.2" /> 
     <!-- snip --> 
    </packages> 
    <packages repository="extension" repositoryId="SampleExtensionId"> 
     <package id="Unity" version="3.0.1304.0" targetFramework="net45" /> 
     <package id="Unity.WebAPI" version="0.10" targetFramework="net45" /> 
     <!-- snip --> 
    </packages> 
</WizardData> 

source.extension.vsixmanifest tagi aktywów

<Assets> 
    <Asset d:VsixSubPath="ProjectTemplates\CustomMVCTemplate" etc/> 
    <Asset Type="Unity.3.0.1304.0" Path="Packages\Unity.3.0.1304.0.nupkg" /> 
    <Asset Type="Unity.WebAPI.0.10" Path="Packages\Unity.WebAPI.0.10.nupkg" /> 
    <!-- snip --> 
</Assets> 

Struktura plików

  • Przedłużenie projektu
    • Pakiety
      • NugetPackage 1
      • NugetPackage 2
      • itp
    • ProjectTemplates
      • CustomMVCTemplate
        • < plików niestandardowych projektów >
    • source.extension.vsixmanifest

Odpowiedz

1

Sprawdź ten link, http://samritchie.net/2012/09/17/nuget-packages-in-vs2012-templates/ który pomógł mi. Wciąż jednak napotykam problem, w którym wszystkie ścieżki moich referencji są puste.

Uwaga szczególności następujący komentarz z artykułu powiązany powyżej:

Spędziłem znaczny okres czasu, próbując się zorientować, co odpowiednik v2 od CustomExtension było, ale wyciąć długie opowiadanie, don Konieczne jest wprowadzenie jakichkolwiek zmian w .vsixmanifest - wystarczy zawrzeć wszystkie pakiety w VSIX w katalogu "Pakiety".

+0

Doskonałe znalezisko. Dodałem również kluczowy akapit do twojej odpowiedzi. – Olly

4

Zrobiłem krok po kroku wideo, jak zrobić VSIX, który automatycznie pobiera pakiety Nuget.

http://www.youtube.com/watch?v=_ZvsFz41H-E

Ponieważ istnieje wiele kroków i nigdy nie napisał je w dół, nie będę wpisać je tutaj. Zdecydowanie przetestowałem mój pakiet VSIX na komputerze innych ludzi i zadziałało, więc mam nadzieję, że to zadziała.

+0

Dla każdego, kto interesuje się tylko odpowiednią częścią, zaczyna się od [22:47] (http://www.youtube.com/watch?feature=player_detailpage&v=_ZvsFz41H-E#t=1367) – KyleMit

+3

Niestety, nie pobiera . W ten sposób pakiety są dodawane do projektu, jeśli zostały już pobrane. – hakan

0

Aby pobrać najnowsze wersje pakietów Nuget oraz wszystkie ich zależności dodać następujące klasy do vsix:

public class MyProjectWizard : IWizard 
{ 
    IEnumerable<string> _packages; 

    public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams) 
    { 
     if (customParams.Length > 0) { 
      var vstemplate = XDocument.Load((string)customParams[0]); 
      _packages = vstemplate.Root 
       .ElementsNoNamespace("WizardData") 
       .ElementsNoNamespace("packages") 
       .ElementsNoNamespace("package") 
       .Select(e => e.Attribute("id").Value) 
       .ToList(); 
     } 
    } 

    public void ProjectFinishedGenerating(Project project) 
    { 
     var componentModel = (IComponentModel)Package.GetGlobalService(typeof(SComponentModel)); 
     var _installer = componentModel.GetService<IVsPackageInstaller2>(); 

     foreach (var package in _packages) { 
      _installer.InstallLatestPackage(null, project, package, false, false); 
     } 
    } 
} 

a następnie użyć następujących w vstemplate:

<WizardExtension> 
    <Assembly>MyProjectWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=22c2a1a5fa7b6905</Assembly> 
    <FullClassName>MyProjectWizard.MyProjectWizard</FullClassName> 
    </WizardExtension> 
Powiązane problemy