visual-studio - 何时需要向 MSBuild 传递解决方案文件?

标签 visual-studio visual-c++ msbuild sln-file

从命令行,我什么时候直接在项目上调用 MSBuild,什么时候在项目的 sln 文件上调用 MSBuild,传递 /t:Build/t:ProjectName?

示例:我有一个包含多个项目(A、B、C、...)的简单解决方案。通过打开并使用解决方案,通过 VS GUI 完成开发。

现在,在一个特定的自动化案例中,我只想从命令行构建项目 B:

我应该怎么称呼?:

(a) MSBuild "my.sln""/t:Build""/t:ProjB""/p:Configuration=Release""/p:Platform=Any CPU"

(b) MSBuild "ProjB.vcxproj""/t:Build""/p:Configuration=Release""/p:Platform=Any CPU"

  • 结果会有什么不同吗?
  • 会不会 sln 文件中有任何其他设置被这种方式遗漏了? (我当然没有在我们的 VS2015 sln 文件中看到任何其他信息。)
  • 如果解决方案很大,但 ProjB 与解决方案中的其他项目几乎没有相互依赖关系,一般来说,一个选项会更快吗?

最佳答案

What should I call? Will there be any difference in the outcome? Could there be any additional setting in the sln file that gets missed this way?

深入如何表达项目之间的依赖关系,使用解决方案表达项目之间的依赖关系或添加对项目的引用?

如果您使用解决方案来表达项目之间的依赖关系,您应该调用命令行(a)。如果调用命令行 (b),依赖项目将被忽略。因为解决方案文件用于在内部将其解析为 MSBuild 中的临时项目文件,所以如果您通过 ProjB.vcxproj 构建项目,这些依赖项信息将被忽略。

例如,我创建了一个包含三个项目的解决方案,TestSampleTestSampleBTestSampleC。使用该解决方案将 TestSampleBTestSampleC 引用添加到 TestSample(右键单击您的解决方案->Properties->通用属性->项目依赖项):

enter image description here

当我们使用(b)命令行构建项目TestSample时,构建了项目TestSample , TestSampleB, TestSampleC忽略

MSBuild "TestSample\TestSample.vcxproj"

enter image description here

当我们调用(a)命令行时,所有的依赖项目都被构建了:

MSBuild "TestSample.sln" /t:"TestSample"

enter image description here

如果将引用添加到项目中(右键单击项目->添加引用),则可以同时调用两个命令行。将构建所有依赖项项目。

因此,如果您使用 sln 文件表达项目之间的依赖关系,我建议将这些依赖关系直接处理到 proj 文件中并将它们从 sln 中删除。这将允许您直接从 MSBuild 调用任何项目文件,项目将全部独立构建,无需任何额外工作。

If the solution is large, but ProjB has little interdependencies with other projects in the solution, will one option be faster in general?

如果构建项目与解决方案中的其他项目没有相互依赖关系,则构建此项目将比整个解决方案更快。

希望这对您有所帮助。

关于visual-studio - 何时需要向 MSBuild 传递解决方案文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46827495/

相关文章:

msbuild - 如何为我的 TransformXml 任务启用 "Treat Warnings as Errors"?

visual-studio - 如何在 Visual Studio 2012 中重命名解决方案、解决方案文件夹、项目文件夹、包/过滤器文件夹和 vcxproj 文件

c# - 带有通用控件的 UserControl - 在设计器中损坏

.net - 设计器 View 中Windows窗体控件中的错误

c++ - 抑制编译器警告 C++

msbuild - OpenCover MSBuild 集成 - 未生成结果

javascript - 如何在不污染html的情况下使用庞大的typescript库?

c++ - ppl的替代品

c++ - Sleep() 未定义但它知道 _sleep() 存在并说要改用 Sleep()? C++

asp.net - 什么Jenkins插件可以用于.NET网站部署?