将NuGet构建工具包与ASP.NET Core一起使用

时间:2017-12-22 21:51:27

标签: msbuild nuget .net-core build-tools

NuGet有几个专为构建时使用而设计的软件包。一个示例是Google.Protobuf.Tools,其中包含$dbh = new PDO( $connection_params ); $sql = "CALL my_sp( :in_var )"; $stmt = $dbh->prepare( $sql ); $stmt->execute( array( ':in_var' => $_POST['in_var'] ) ); do { $rowset = $stmt->fetchAll(PDO::FETCH_ASSOC); if ($rowset) { ...do something with rowset... } } while ($stmt->nextRowset());

使用.NET Core之前的.csproj系统,您可以添加Google.Protobuf.Tools,然后使用预构建事件来运行protoc.exe

使用新的.NET Core .csproj系统,在某些方面它更好。例如,清理了.csproj文件,因此您可以轻松地手动添加构建目标以获得增量构建,如下所示:

..\Packages\...\protoc ...

问题是没有<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> 个文件夹。总的来说,这是一件好事。但是,如何才能获得我想要的NuGet构建工具包的路径,以便在MSBuild目标中使用?

1 个答案:

答案 0 :(得分:4)

对于ASP.NET Core项目,您可以使用 $(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" />