将 NuGet 构建工具包与 ASP.NET 核心一起使用
Use NuGet build tool packages with ASP.NET Core
NuGet 有几个专为在构建时使用而设计的包。一个例子是 Google.Protobuf.Tools,它包含 protoc.exe
.
在 .NET Core 之前的 .csproj 系统中,您可以添加 Google.Protobuf.Tools,然后使用预构建事件 运行 ..\Packages\...\protoc ...
。
使用新的 .NET Core .csproj 系统,在某些方面更好。例如,清理了 .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
文件夹。总的来说,这是一件好事。但是我怎样才能获得我想要的 NuGet 构建工具包的路径,以便在 MSBuild 目标中使用?
对于 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" />
NuGet 有几个专为在构建时使用而设计的包。一个例子是 Google.Protobuf.Tools,它包含 protoc.exe
.
在 .NET Core 之前的 .csproj 系统中,您可以添加 Google.Protobuf.Tools,然后使用预构建事件 运行 ..\Packages\...\protoc ...
。
使用新的 .NET Core .csproj 系统,在某些方面更好。例如,清理了 .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
文件夹。总的来说,这是一件好事。但是我怎样才能获得我想要的 NuGet 构建工具包的路径,以便在 MSBuild 目标中使用?
对于 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" />