我有一个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#项目类型有了新的指南-但这可能有关吗?
答案 0 :(得分:0)
弄清楚了。我不知道为什么为什么,但是可以通过在加载前将解决方案文件中的SDK项目的项目类型GUID更改为9A19103F-16F7-4668-BE54-9A1E7A4F7556来解决此不良行为它。
似乎当VS进行自动升级到新的项目类型GUID时,它不能正确检测项目的配置,并且默认情况下仅使用Release和Debug。
答案 1 :(得分:0)
我发现在我的情况下,更新的.csproj文件没有<Configurations>
节点,这显然意味着仅定义了Debug
和Release
。
尝试添加
<Configurations>Debug;Release;DebugLinux;ReleaseLinux;DebugMac;ReleaseMac</Configurations>