2013-07-12 21 views
5

私はいくつかのカスタムMVCプロジェクトの種類を追加しますVSIXプロジェクトをビルドする方法についてのこの記事を、次のされています:VSIXプロジェクトテンプレートとNuGetでパッケージ

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

私はまた、いくつかの追加Nugetパッケージを含めますだから私はthis page from Nugetに従っていたが、それはVS2010のためにあるようだが、私は2012年に働いている。

私はプロジェクトビルディングを持っていて、私のマシン上ではすべてがピーチです。インストールが動作し、新しいプロジェクトタイプが表示されます。このタイプの新しいプロジェクトを作成すると、すべてが完全に機能します。

しかし、私は同僚に同インストーラを送信すると、物事が壊れます。インストーラは動作し、新しいプロジェクトタイプが表示されますが、プロジェクトを作成するときに、拡張ノードにパッケージをインストールできないというエラーメッセージが表示されます。拡張機能の製品IDが正しいことを確認しました(テスト中に.vstemplateファイルに意図的に不正な形式であり、まったく異なるエラーが発生しました)。私は、拡張マニフェストにパッケージを追加しましたが、違いはありません。また、.nupkgファイルが%ProgramFiles(x86)%\ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ Extensionsにデプロイされることを確認しました。

どうすればよいですか?

カスタムプロジェクトの.vstemplateセクション

<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資産タグ

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

ファイル構造

  • の拡張プロジェクト
    • パッケージ
      • NugetPackage 1
      • NugetPackage 2
      • など
    • ProjectTemplates
      • CustomMVCTemplate
        • <カスタムプロジェクトファイル>
    • source.extension.vsixmanifest

答えて

1

を手伝ってくれた。このリンクhttp://samritchie.net/2012/09/17/nuget-packages-in-vs2012-templates/をチェックしてください。しかし、私はすべての私の参照のパスが空である問題にまだ取り組んでいます。上記のリンク先の記事から、特に以下のコメント

注:

私はCustomExtensionのV2相当が何であったかうまくしようとしてかなりの時間を費やしたが、短い長い話をカットするために、あなたのドン.vsixmanifestを変更する必要はありません.VSIX内のすべてのパッケージを 'Packages'ディレクトリに含めるだけで十分です。

+0

優秀な発見を。私はあなたの答えにも直接キー段落を追加しました。 – Olly

4

私は、自動的にナゲットパッケージをダウンロードするVSIXを作成する方法について、ステップバイステップのビデオを作成しました。

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

は多くのステップがあるので、私は、私はそれらをここに入力しないであろう、それらを書き留めたことはありません。私は間違いなく他の人のマシン上で私のVSIXパッケージをテストしたのでうまくいけば、これはあなたのために動作します。

+0

関連する部分だけに興味がある方は、[22:47](http://www.youtube.com/watch?feature=player_detailpage&v=_ZvsFz41H-E#t=1367) – KyleMit

+3

からダウンロードしてください。このようにして、パッケージが既にダウンロードされている場合は、パッケージがプロジェクトに追加されます。 – hakan

0

NuGetパッケージの最新バージョンをダウンロードするには、プラスのすべての依存関係は、あなたの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); 
     } 
    } 
} 

そしてvstemplateで、次の使用:

<WizardExtension> 
    <Assembly>MyProjectWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=22c2a1a5fa7b6905</Assembly> 
    <FullClassName>MyProjectWizard.MyProjectWizard</FullClassName> 
    </WizardExtension> 
関連する問題