场景
您添加了一个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之前将其还原。但是细节决定成败。不能成为第一个遇到此问题的人。
你如何做到的?
答案 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>
现在,解决方案中的所有软件包都将在构建之前恢复。
谢谢,易卜拉欣·哈希米说。