【问题标题】:Why is VS 2017 changing the ProjectConfigurationPlatforms section of my solution file?为什么 VS 2017 更改了我的解决方案文件的 ProjectConfigurationPlatforms 部分?
【发布时间】:2019-02-19 00:04:36
【问题描述】:

我有一个 C# (.NET Framework) 应用程序,我正在尝试从 VS2015 迁移到 VS2017,并将项目文件 xml 更改为 SDK 格式以准备迁移到 .NET Core。

我将解决方案中的 12 个项目中的 5 个迁移到了较新的 SDK 项目格式。我发现 VS2017 正在更改与我身上的两个更新项目相关的解决方案文件的部分内容,并破坏了我的构建。

我正在寻求帮助以了解 为什么 VS 进行此更改,以及如何防止它。我怀疑我在我的 SDK 项目的 XML 中遗漏了一些东西,但我不知道我遗漏了什么。

我尝试在我的 SDK 项目中包含一个 <Configurations> 属性,该属性列出了所有有效的配置,但这似乎对这两个项目没有影响。它似乎确实解决了其他 3 个 SDK 项目的问题,但不是这两个。唯一不同的是,被更改的 2 个是可执行文件的项目,而另外 3 个是用于库的。

我的解决方案文件中有以下内容:

        GlobalSection(SolutionConfigurationPlatforms) = preSolution
                Debug|Any CPU = Debug|Any CPU
                DebugLinux|Any CPU = DebugLinux|Any CPU
                DebugMac|Any CPU = DebugMac|Any CPU
                ReleaseLinux|Any CPU = ReleaseLinux|Any CPU
                ReleaseMac|Any CPU = ReleaseMac|Any CPU
                ReleaseWin|Any CPU = ReleaseWin|Any CPU
        EndGlobalSection

当我删除所有构建工件,将解决方案加载到 VS2017,构建解决方案的一个配置,然后关闭 VS2017 时,我发现 VS 已决定更改我的解决方案文件中的一堆配置。以下是 VS 所做更改的差异示例。

-               {guid-redacted}.ReleaseLinux|Any CPU.ActiveCfg = ReleaseLinux|Any CPU
-               {guid-redacted}.ReleaseLinux|Any CPU.Build.0 = ReleaseLinux|Any CPU
-               {guid-redacted}.ReleaseMac|Any CPU.ActiveCfg = ReleaseMac|Any CPU
-               {guid-redacted}.ReleaseMac|Any CPU.Build.0 = ReleaseMac|Any CPU
-               {guid-redacted}.ReleaseWin|Any CPU.ActiveCfg = ReleaseWin|Any CPU
-               {guid-redacted}.ReleaseWin|Any CPU.Build.0 = ReleaseWin|Any CPU
+               {guid-redacted}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU
+               {guid-redacted}.ReleaseLinux|Any CPU.Build.0 = Release|Any CPU
+               {guid-redacted}.ReleaseMac|Any CPU.ActiveCfg = Release|Any CPU
+               {guid-redacted}.ReleaseMac|Any CPU.Build.0 = Release|Any CPU
+               {guid-redacted}.ReleaseWin|Any CPU.ActiveCfg = Release|Any CPU
+               {guid-redacted}.ReleaseWin|Any CPU.Build.0 = Release|Any CPU

它将我所有的Release* 配置更改为简单的Release。我们将项目中的一些逻辑与Configuration 属性的值分开,因此这些更改正在破坏该逻辑。​​

所有更改都本地化到ProjectConfigurationPlatforms 部分;幸运的是,VS 没有触及 SolutionConfigurationPlatforms 部分。

欢迎提出任何建议;我束手无策,试图弄清楚出了什么问题。

谢谢!

编辑:VS 还将这些项目的项目类型 GUID 从 FAE04EC0-301F-11d3-BF4B-00C04F79EFBC 更改为 9A19103F-16F7-4668-BE54-9A1E7A4F7556。这似乎是意料之中的——有一个针对 C# 项目类型的新指南——但也许它是相关的?

【问题讨论】:

    标签: visual-studio visual-studio-2017 visual-studio-2017-build-tools


    【解决方案1】:

    想通了。我不确切地知道为什么,但是可以通过在加载之前将解决方案文件中的 SDK 项目的项目类型 GUID 更改为 9A19103F-16F7-4668-BE54-9A1E7A4F7556 来解决这种不良行为它。

    似乎当 VS 自动升级到新的项目类型 GUID 时,它没有正确检测项目的配置是什么,并且默认只使用发布和调试。

    【讨论】:

      【解决方案2】:

      我发现在我的情况下,更新的 .csproj 文件没有 <Configurations> 节点,这显然意味着只定义了 DebugRelease

      尝试添加

      <Configurations>Debug;Release;DebugLinux;ReleaseLinux;DebugMac;ReleaseMac</Configurations>
      

      【讨论】:

        猜你喜欢
        • 2022-01-14
        • 2021-05-06
        • 2015-11-05
        • 2017-07-30
        • 1970-01-01
        • 1970-01-01
        • 2017-11-07
        • 1970-01-01
        • 2012-10-22
        相关资源
        最近更新 更多