代码之家  ›  专栏  ›  技术社区  ›  mark

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

  •  1
  • mark  · 技术社区  · 6 年前

    场景

    你加了一个Nuget包,然后注入 <Import .../> 语句到csproj文件中,该文件引用包本身的目标或props文件。

    当在Visual Studio中构建代码时,这种方法很好,但在使用msbuild构建相同的解决方案时失败得很惨。

    根本原因

    有几个。首先,恢复包的逻辑是由vs本身在build-proper之外执行的。我们可以通过进口来解决 Nuget.targets 哪个可以运行 RestorePackage 生成前的目标。检查。

    但第二个问题更为严重。这个 Import 只有在还原包后才能解析从包导入目标/属性的语句。这意味着恢复包不能是构建的一部分。必须在为msbuild提供要生成的解决方案之前发生。是的,Visual Studio已经这样做了,但我没有在封闭签入或CI服务器上使用Visual Studio。我需要它与msbuild一起工作。

    你能做什么?

    据我所知,我需要能够在命令行上运行与之相同的逻辑。也就是说,在运行msbuild之前识别并还原包。但魔鬼在细节上。我不能是第一个面对这个问题的人。

    你是怎么做到的?

    1 回复  |  直到 6 年前
        1
  •  0
  •   mark    6 年前

    在这篇博文中找到了答案- 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>
    

    现在,解决方案中的所有包都在生成之前恢复。

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