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 task - Build failed 因为一个解决方案是在 release 而不是 debug 中构建的,但这是特定于 TFS 和 Teambuild 的。我说的是纯 MSBuild 和一个从头开始创建的简单项目文件。

我该如何解决这个问题?

4

4 回答 4

27

关于平台任何 cpu 的拼写问题,事实证明存在一个问题,已经在 StackOverflow 和 Microsoft 的其他地方报道过。Platform它通常会影响 MSBuild,并且在我的 dotnet v3.5 MSBuild /help 中省略了整个文档问题。所以也许这会对某人有所帮助!

链接

TFS 2010 MSBuild中的“AnyCPU”与“Any CPU”
解决方案和项目之间的“Any CPU”平台不一致

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  

MSBuildPlatform属性具有不同的值Any CPU具体取决于您是构建解决方案还是构建项目
- 用于解决方案- 使用Platform="Any CPU"-有空间
- 用于项目- 使用Platform="AnyCPU"-没有空间

于 2012-01-03T22:10:28.360 回答
8

好的,我找到了问题。与 MSBuild 无关,而是正在构建的解决方案。发帖拯救别人的心痛。

无论出于何种原因,在解决方案中配置了调试配置,如下所示:

替代文字 http://www.freeimagehosting.net/uploads/cad0bdf1c0.jpg

所以 MSBuild 也只是在做它被告知的事情......

于 2009-04-08T11:21:05.687 回答
8

我遇到了同样的错误。解决方案是明确指定目标平台:

msbuild.exe /p:Platform="Any CPU"

自从我升级到 Windows 7 后才开始发生这种情况,所以我想这与此有关。

于 2010-07-09T02:53:44.890 回答
1

您是否尝试过使用 /v:diag 运行?

另外,除此之外:我认为您想要“AnyCPU”(没有空间)。

于 2009-04-06T23:51:10.593 回答