【问题标题】:MSBuild task does not build solution fileMSBuild 任务不构建解决方案文件
【发布时间】:2015-09-17 10:19:27
【问题描述】:

我有一个项目文件应该构建另一个解决方案。我尝试为此使用 MSBuild 任务,如下所示:

<MSBuild Projects="MySolution.sln" Properties="Configuration=$(Configuration)"/>

我尝试了很多变体,例如提供硬编码配置、目标重建等。当我传递错误的解决方案名称、不存在的配置或目标等时,构建会报告错误,因此它肯定会加载解决方案和项目文件。虽然它退出相对较快并且不产生任何输出。根据文档和示例,这应该可以工作。我还尝试为项目传递一个 ItemGroup,包括示例或 MSBuild - How to build a .NET solution file (in an XML task script) from pre-written command line commands 中建议的项目特定属性,但这也不起作用。它运行没有错误,但没有输出。

当传递项目文件列表(或单个项目文件)时,它会正确构建,但问题是项目之间的依赖关系没有正确解决。最后,我必须提供解决方案中的所有项目文件并将它们添加到列表中,这是我想要避免的。

那么,为什么解决方案构建不起作用,即使它应该起作用?这里有什么问题?

【问题讨论】:

    标签: msbuild


    【解决方案1】:

    这是一个 .net 项目吗?如果是这样,您可能需要传入平台和配置。

    <MSBuild
      Projects="MySolution.sln"
      Targets="build"
      Properties="Configuration=$(Configuration);Platform=$(Platform)" />
    

    如果项目只包含网站和库,那么平台应该是 Any CPU 如果您的解决方案只包含可执行文件,那么 x86x64 或者如果它是不同类型平台的混合,那么您可以使用 @987654327 @

    要检查可用的解决方案,请在 Visual Studio 中打开解决方案,在解决方案资源管理器中右键单击解决方案并选择“配置管理器”,然后您将看到“活动解决方案平台”的下拉列表

    【讨论】:

    • 好的,这就是问题所在。传递“任何 CPU”将正常工作。然而,通过 $(Platform) 不起作用,即使我在 Any CPU build 中。传递的值是“AnyCPU”(没有空格)。知道为什么吗?
    • 是的,我发现了另一个错误:由于某种原因,当这样构建时,MSBuild 不维护项目依赖关系。官方声明是,当解决方案中找不到配置或平台时,它会执行此操作,但在这种情况下,两者都存在。如果指定“错误”的平台,它不会构建任何东西。我正在尝试使用 Exec 而不是 MSBuild,但这会导致下一个问题(查找 msbuild.exe)...
    • 我们现在回到以正确的顺序构建单个项目,而不是依赖于解决方案。这很好用,唯一的缺点是我必须维护列表。但是,我们只需要解决方案中的几个项目......
    • “Any CPU”的错误实际上是由于空白,并且仍然存在是VS2015。需要在值周围加上引号来调用它。
    猜你喜欢
    • 2012-12-16
    • 2011-09-09
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 2011-09-15
    • 1970-01-01
    相关资源
    最近更新 更多