【问题标题】:MSBuild vs Visual Studio build - Build targetsMSBuild 与 Visual Studio 构建 - 构建目标
【发布时间】:2017-12-05 09:01:14
【问题描述】:

MSBuild 报告了一些奇怪的事情:

D:\Test>msbuild Test.sln Microsoft (R) Build Engine 版本 15.1.1012.6693 版权所有 (C) Microsoft Corporation。保留所有权利。

在此解决方案中一次构建一个项目。启用 并行构建,请添加“/m”开关。构建开始于 2017 年 7 月 1 日 下午 5 点 33 分 14 秒。节点 1 上的项目“D:\Test\Test.sln”(默认目标)。 D:\Test\Test.sln.metaproj : error MSB4126: The specified solution 配置“Debug|x64”无效。请指定一个有效的解决方案 使用配置和平台属性进行配置(例如 MSBuild.exe Solution.sln /p:Configuration=Debug /p:Platform="Any CPU") 或将这些属性留空以使用默认解决方案 配置。 [D:\Test\Test.sln] 完成构建项目 “D:\Test\Test.sln”(默认目标)--失败。

所以,Debug|x64 无效...

问题是:

D:\Test>找到“X64”Test.sln

--------- TEST.SLN

这不是现有的目标。

提到的文件(D:\Test\Test.sln.metaproj)也不存在(也检查了隐藏文件)。

sln 文件将 DEBUG|AnyCPU 和 RELEASE|AnyCPU 作为目标。

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26430.14
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test", "Test\Test.csproj", "{63FA3D37-7672-4C5F-BAE2-43CCF8ABC7E4}"
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|Any CPU = Debug|Any CPU
        Release|Any CPU = Release|Any CPU
    EndGlobalSection
    GlobalSection(ProjectConfigurationPlatforms) = postSolution
        {63FA3D37-7672-4C5F-BAE2-43CCF8ABC7E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {63FA3D37-7672-4C5F-BAE2-43CCF8ABC7E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {63FA3D37-7672-4C5F-BAE2-43CCF8ABC7E4}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {63FA3D37-7672-4C5F-BAE2-43CCF8ABC7E4}.Release|Any CPU.Build.0 = Release|Any CPU
    EndGlobalSection
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
    EndGlobalSection
EndGlobal

那么为什么 MSBuild 会感到困惑呢?

作为个人笔记,看起来自从 MS 采用 .NET Core 计划以来,整个构建系统一直是一个巨大的混乱与断开设置等。

【问题讨论】:

    标签: visual-studio msbuild


    【解决方案1】:

    事实证明,这与环境变量相关联(好像我们还没有足够的配置文件)。

    当你运行 cmd.exe 时,如果你选择 x86 或 x64,它会设置一个环境变量。

    还有一些不成文的规定是这样说的:

    • x86 是 AnyCPU.. 或 x86
    • x64 是 x64 但不是 AnyCPU..

    【讨论】:

    • 感谢您在这里分享您的解决方案,您可以将其标记为答案,这样可以帮助遇到相同问题的其他社区成员。
    • 我不得不提前 2 天才被允许这样做;完成:)