如何使用msbuild 14从nuget包中导入目标和道具的项目构建VS 2015解决方案?

时间:2018-06-22 15:11:17

标签: visual-studio msbuild nuget

场景

您添加了一个nuget程序包,该程序包随后将<Import .../>语句注入到csproj文件中,该语句引用了程序包本身中的target或props文件。

在Visual Studio中构建代码时,此方法工作正常,但在与msbuild构建相同的解决方案时却失败了。

根本原因

有几个。首先,还原软件包的逻辑由VS本身在适当的构建之外执行。我们可以通过导入Nuget.targets来解决它,该文件将在构建之前运行RestorePackage目标。检查。

但是第二个问题更加严重。 Import语句从软件包中导入目标/属性只能在恢复软件包后解决。意味着恢复软件包不能成为构建的一部分。它必须在msbuild得到解决方案生成之前发生。是的,Visual Studio已经做到了,但是我没有在Gated Check-In或CI服务器上使用Visual Studio。我需要它与msbuild一起使用。

可以做什么?

据我了解,我需要能够运行VS仅在命令行上执行的相同逻辑。即确定包并在运行msbuild之前将其还原。但是细节决定成败。不能成为第一个遇到此问题的人。

你如何做到的?

1 个答案:

答案 0 :(得分:0)

在此博客文章中找到了答案-http://sedodream.com/2013/06/06/HowToSimplifyShippingBuildUpdatesInANuGetPackage.aspx

在创建此博客之后,我创建了before.MySolutionName.sln.targets文件,其内容如下:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Restore">
  <Target Name="Restore" BeforeTargets="Build">
    <Exec Command=".nuget\nuget.exe restore $(MSBuildProjectName)" LogStandardErrorAsError="true" />
  </Target>
</Project>

现在,解决方案中的所有软件包都将在构建之前恢复。

谢谢,易卜拉欣·哈希米说。