繁体   English   中英

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

[英]How to build VS 2015 solution with projects which import targets and props from nuget packages using msbuild 14?

场景

您添加了一个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之前,先确定软件包并还原它们。 但是细节决定成败。 不能成为第一个遇到此问题的人。

你怎么做呢?

在此博客文章中找到了答案-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>

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM