2017-12-22 26 views
2

NuGetには、ビルド時に使用するために設計されたいくつかのパッケージがあります。例はであり、protoc.exeを含んでいます。ASP.NETコアでNuGetビルドツールパッケージを使用

.NETコアの前の.csprojシステムでは、Google.Protobuf.Toolsを追加してから、事前ビルドイベントを使用して..\Packages\...\protoc ...を実行できます。

新しい.NETコアの.csprojシステムでは、いくつかの点でそれはより良いです。

<Target Name="PreBuild" BeforeTargets="PreBuildEvent"> 
    <CallTarget Targets="DeviceMessages" /> 
</Target> 

<Target Name="DeviceMessages" Inputs="DeviceMessages.proto" Outputs="obj\DeviceMessages.cs"> 
    <Exec Command="..\Packages\Google.Protobuf.Tools.3.4.0\tools\windows_x64\protoc --proto_path=. --csharp_out=obj DeviceMessages.proto" Outputs="obj\DeviceMessages.cs" /> 
</Target> 

問題がこれ以上Packagesフォルダが存在している:あなたは簡単にこのように、ビルドを増分取得するには、ビルドターゲットを手で追加することができますので、たとえば、.csprojファイルは、クリーンアップされます。一般的に、それは良いことです。しかし、MSBuildターゲットで使用するNuGetビルドツールパッケージへの道はどうやって手に入りますか?

答えて

3

ASP.NETコアプロジェクトの場合、$(NuGetPackageRoot) MSBuildプロパティを使用できます。これは、生成されたobj/ProjectName.csproj.nuget.g.propsファイルのリストア後に定義されます。

次に、あなたのExecは次のようになります。

<Exec Command="$(NuGetPackageRoot)Google.Protobuf.Tools.3.4.0\tools\windows_x64\protoc --proto_path=. --csharp_out=obj DeviceMessages.proto" Outputs="obj\DeviceMessages.cs" /> 
関連する問題