2017-05-01 3 views
13

私はVisual Studio 2017カスタムチェックインポリシー拡張を作成しています。次のように私の現在のソリューションは、構造化されています。NuGetパッケージのアセンブリをVSIXインストーラに含めるにはどうすればよいですか?

VSIX Solution Structure

注:私はpackages.configファイルが存在しない理由は、新しいNuGet PackageReferenceアプローチ、を利用しています。


は私が設定していると信じて、私のVSIXマニフェスト私はMicrosoft.Net.Httpは(もともと私は値をハードコーディングする代わりの値を取得された)を参照していないとき、すべてが完璧に動作し、適切以来。私はなぜMicrosoft.TeamFoundationServer.ExtendedClient NuGetパッケージが含まれていても何の問題も起こらないのか分かりませんが、NuGetパッケージはMicrosoft.Net.Httpです。

私はコンパイルされているものを見るためにデバッグフォルダーを見ましたが、VSIX(* .zipに名前を変更して解凍したもの)をアンパックすると、プロジェクトアセンブリのみが含まれる; Nugetで参照されるアセンブリは、VSIXパッケージにパッケージ化されていません。

私はいくつかのリソースに出くわしたが、何も動いていないようにみえ:

これらの質問/回答のひとつひとつの1私の特定の問題に対処していないようです。


更新:

私はVSIXパッケージを生成するために使用されるツールはNuGetの新PackageReference機能をサポートしていない可能性があると信じています。古いpackages.config機能を利用すると、すべて正常に動作します。私は新しいNuGet機能をサポートするためにUserVoice Ticketを入れました。

+0

を実行している私は遅れて来るかもしれないが、このスレッドは私の問題を解決します。https://のstackoverflow。 com/questions/42201923/vsix-extension-how-can-i-sure-a-referenced-dll-or-assembly-in-th –

+0

@AmauryLevé:この質問はあなたの問題を解決したかもしれませんが、私が参照していた問題とはまったく無関係です.VSIXパッケージャと関係があったのは、NuGetのPackageReference機能によるアセンブリが自動的に含まれているためです。その質問/回答は、アセンブリを直接参照してアセットを追加することを扱います。 –

答えて

1

私は成功し、次のマイクロソフトのチュートリアルで説明する手順を実行して、テンプレートにNuGetパッケージを含めることができました:MSIを使用してインストールされているPackages in Visual Studio templates

のSDKは開発者のマシン上で直接NuGetパッケージをインストールすることができます。これにより、プロジェクトまたはアイテムテンプレートが使用されているときに、その時間に抽出するのではなく、すぐに使用できるようになります。 ASP.NETテンプレートはこのアプローチを使用します。

私が使用しているNuGetパッケージのために他の人が問題を抱えているのを見ました。 .NETコアの場合、私はMicrosoft.Net.Httpを使用しましたが、それにはMicrosoft.BCLが必要です。問題が発生していない限り、レガシーシステムをそのままにしておくことをお勧めします。特に、これらの名前空間は動いているターゲットのようです。

少なくともWindowsプラットフォームでは、System.Net.Httpが正しい選択です。また、このパッケージに外部依存がないことは何の価値もない。


EDIT: PackageReference自体にバグに関連している可能性が表示されます。私はhereと記載された同様の文書化されたバグを見る。

+0

私はあなたが私が持っている問題を誤解していると思います。私は、アイテムやプロジェクトのテンプレートを作成するのではなく、カスタムのチェックインポリシーを作成しています。私が遭遇した問題は、生成されたVSIXパッケージに、アセンブリが依存していたNuGetアセンブリが含まれていなかったことです。参照しているリンクは、Item/ProjectテンプレートがNuGetパッケージをそれらのテンプレートを使用するプロジェクトに自動的にプルする方法を示しています。さらに、この問題は、NuGetの新しいPackageReference機能を中心としています。 NuGetのpackages.configメソッドを代わりに使用すると、すべてうまく動作します –

+0

NuGetのPackageReference機能を使用したいと思う理由があるのですか? – lax1089

+1

はい、http://blog.nuget.org/20170316/NuGet-nowfullyfullyintegrated-into-MSBuild.html - 基本的には多くのメリットがあり、NuGetの未来です。 –

0

この問題(Nuget + vsix + netstandard + vsの組み合わせは毎日厳しい)に直面している私たちのような貧しい人々のために、私はこの投稿に触発された回避策を見つけました:NuGet packages referenced via PackageReference don't include DLLs in VSIX。例えば、ここでは、私は手動で4つのnugetパッケージを参照:

<Target Name="IncludeNuGetPackageReferences" AfterTargets="GetVsixSourceItems"> 
    <ItemGroup> 
    <VSIXSourceItem Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.NuGetPackageId)' == 'Microsoft.Win32.Registry'" /> 
    <VSIXSourceItem Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.NuGetPackageId)' == 'System.CodeDom'" /> 
    <VSIXSourceItem Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.NuGetPackageId)' == 'System.Configuration.ConfigurationManager'" /> 
    <VSIXSourceItem Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.NuGetPackageId)' == 'System.ServiceProcess.ServiceController'" /> 
    </ItemGroup> 
</Target> 

はPS:私は、Visual Studio 15.5.4

関連する問題