2017-12-22 46 views
2

NuGet에는 빌드시 사용할 수 있도록 설계된 여러 패키지가 있습니다. 예를 들어 Google.Protobuf.Tools이고 protoc.exe이 포함되어 있습니다.ASP.NET 코어와 함께 NuGet 빌드 도구 패키지를 사용하십시오.

.NET Core 이전의 .csproj 시스템을 사용하면 Google.Protobuf.Tools를 추가 한 다음 사전 빌드 이벤트를 사용하여 ..\Packages\...\protoc ...을 실행할 수 있습니다.

새로운 .NET Core .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" />