VS 2017为什么更改我的解决方案文件的ProjectConfigurationPlatforms部分?

时间:2019-02-19 00:04:37

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

我有一个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部分。

欢迎任何建议;我竭尽全力试图找出问题所在。

谢谢!

edit:VS还将这些项目的项目类型GUID从FAE04EC0-301F-11d3-BF4B-00C04F79EFBC更改为9A19103F-16F7-4668-BE54-9A1E7A4F7556。这似乎是预料之中的-C#项目类型有了新的指南-但这可能有关吗?

2 个答案:

答案 0 :(得分:0)

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

似乎当VS进行自动升级到新的项目类型GUID时,它不能正确检测项目的配置,并且默认情况下仅使用Release和Debug。

答案 1 :(得分:0)

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

尝试添加

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