MSBuild任务配置属性

19

我有三个Visual Studio解决方案。第一个被配置为以Release模式构建,而其它两个则设置为以Debug模式构建。

当运行一个简单的MSBuild脚本并明确指定要构建的配置(Debug)时,第一个项目仍然被作为Release模式构建。

示例脚本:

<Target Name="Build">
    <ItemGroup>
        <ProjectToBuild Include="$(SolutionsPath)\Solution1.sln"/>
        <ProjectToBuild Include="$(SolutionsPath)\Core\Solution2.sln"/>
        <ProjectToBuild Include="$(SolutionsPath)\UI\Solution3.sln"/>
    </ItemGroup>
    <MSBuild Projects="@(ProjectToBuild)"
             Targets="Rebuild"
             Properties="Configuration=Debug;Platform=Any CPU"/>
</Target>

我尝试了与上述类似的各种方法,例如以下方法,但最终结果总是相同。

<Target Name="Build">
    <ItemGroup>
        <ProjectToBuild Include="$(SolutionsPath)\Solution1.sln">
            <Properties>Configuration=Debug</Properties>
        </ProjectToBuild>

        <ProjectToBuild Include="$(SolutionsPath)\Core\Solution2.sln">
            <Properties>Configuration=Debug</Properties>
        </ProjectToBuild>

        <ProjectToBuild Include="$(SolutionsPath)\UI\Solution3.sln">
            <Properties>Configuration=Debug</Properties>
        </ProjectToBuild>
    </ItemGroup>
    <MSBuild Projects="@(ProjectToBuild)"
             Targets="Rebuild"
             Properties="Platform=Any CPU"/>
</Target>

我注意到有一个类似的问题,MSBuild任务-由于正在以发布而不是调试模式构建一个解决方案,因此构建失败,但那只适用于TFS和Teambuild。我在谈论纯MSBuild和一个从头开始创建的简单项目文件。

我该如何解决这个问题?

4个回答

27
关于平台任意CPU的拼写问题,事实上已经在StackOverflow和Microsoft上报告了问题。它影响了MSBuild的整体使用,并且在我的dotnet v3.5 MSBuild /help中忽略了Platform文档的整个问题。因此,这可能会对某些人有所帮助!
链接 TFS 2010中的"AnyCPU"与"Any CPU"之间的差异 项目和解决方案中的"Any CPU"的MSBuild不一致
Closed as Won't Fix   
Type:  Bug
ID:  503935  
Opened:  10/26/2009 1:29:12 PM
Access Restriction:  Public  
0 Workaround(s)
5 User(s) can reproduce this bug  

The MSBuild Platform 属性在构建解决方案或项目时对于 Any CPU 有不同的取值。
- 对于解决方案 - 使用 Platform="Any CPU" - 含空格
- 对于项目 - 使用 Platform="AnyCPU" - 不含空格

7
这绝对是我见过的微软团队中最糟糕的决定之一。 - Blake Niemyjski
在此处发布了VS2013的新错误:https://connect.microsoft.com/VisualStudio/feedback/details/932918/solution-and-project-have-different-values-for-any-cpu# - Micah Zoltu

8
我曾遇到同样的错误。解决方案是明确指定目标平台,使用以下命令:
```` 指定目标平台 ````
msbuild.exe /p:Platform="Any CPU"

自从我升级到Windows 7以来,这种情况只发生了一次,所以我猜这与Windows 7有关。


8

好的,我已经找到了问题所在。与MSBuild无关,而是正在构建的解决方案。发布此内容是为了避免其他人的心痛。

由于某种原因,调试配置在解决方案中被配置如下:

alt text http://www.freeimagehosting.net/uploads/cad0bdf1c0.jpg

因此,MSBuild只是按照它被告知的去做...


2
我认为那是所有那些微小的蚂蚁。 - Mike the Tike
12
图片链接损坏,请考虑发布实际的源代码。 - Mizipzor

1
你尝试过使用/v:diag运行吗?
另外,顺便说一下:我认为你想要的是"AnyCPU"(没有空格)。

FYI,任何 CPU 都是正确的...错误 MSB4126:指定的解决方案配置“Debug|AnyCPU”无效。请使用 Configuration 和 Platform 属性指定有效的解决方案配置(例如 MSBuild.exe Solution.sln /p:Configuration=Debug /p:Platform="Any CPU")。 - crowleym
遇到过同样的问题...查看.csproj文件中的平台名称,它们被命名为AnyCpu(没有空格),因此在构建脚本中进行更改即可解决问题。 - Youp Bernoulli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接