2

我有一个 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# 项目类型的新指南——但也许它是相关的?

4

2 回答 2

0

我发现在我的情况下,更新的 .csproj 文件没有一个<Configurations>节点,该节点显然仅表示Debug并且Release已定义。

尝试添加

<Configurations>Debug;Release;DebugLinux;ReleaseLinux;DebugMac;ReleaseMac</Configurations>
于 2020-06-15T09:04:26.683 回答
0

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

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

于 2019-02-19T03:58:49.090 回答