我有一个 C# (.NET Framework) 应用程序,我正在尝试从 VS2015 迁移到 VS2017,并将项目文件 xml 更改为 SDK 格式以准备迁移到 .NET Core。
我将解决方案中的 12 个项目中的 5 个迁移到了较新的 SDK 项目格式。我发现 VS2017 正在更改与我身上的两个更新项目相关的解决方案文件的部分内容,并破坏了我的构建。
我正在寻求帮助以了解VS 进行此更改的原因以及如何防止它。我怀疑我在我的 SDK 项目的 XML 中遗漏了一些东西,但我不知道我遗漏了什么。
我尝试<Configurations>
在我的 SDK 项目中包含一个属性,该属性列出了所有有效的配置,但这似乎对这两个项目没有影响。它似乎确实解决了其他 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*
配置更改为 plain Release
。我们将项目中的一些逻辑与Configuration
属性的值分开,因此这些更改正在破坏该逻辑。
所有更改都本地化到该ProjectConfigurationPlatforms
部分;幸运的是,VS 没有触及该SolutionConfigurationPlatforms
部分。
欢迎任何和所有建议;我束手无策,试图弄清楚出了什么问题。
谢谢!
编辑:VS 还将这些项目的项目类型 GUID 从 FAE04EC0-301F-11d3-BF4B-00C04F79EFBC 更改为 9A19103F-16F7-4668-BE54-9A1E7A4F7556。这似乎是意料之中的——有一个针对 C# 项目类型的新指南——但也许它是相关的?