Почему VS 2017 меняет раздел ProjectConfigurationPlatforms моего файла решения?

У меня есть приложение на C# (.NET Framework), которое я пытаюсь перенести с VS2015 на VS2017, и меняю файл проекта xml на формат SDK при подготовке к переходу на.NET Core.

У меня 5 из 12-ти проектов в решении, перенесенных в более новый формат проекта SDK. Я обнаружил, что VS2017 меняет части файла решения, связанные с двумя из этих обновленных проектов, и ломает мои сборки.

Мне нужна помощь, чтобы понять, почему VS делает это изменение и как его предотвратить. Я подозреваю, что чего-то не хватает в XML моих проектов SDK, но я не знаю, что мне не хватает.

Я пытался в том числе <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* конфигурации в просто Release, Мы вносим некоторую логику в проекты из ценности Configuration свойство, поэтому эти изменения разрушают эту логику.

Все изменения локализованы на ProjectConfigurationPlatforms раздел; VS, к счастью, не касается SolutionConfigurationPlatforms раздел.

Любые предложения приветствуются; Я в конце концов пытаюсь выяснить, что происходит не так.

Спасибо!

изменить: VS также изменяет GUID типа проекта для этих проектов с FAE04EC0-301F-11d3-BF4B-00C04F79EFBC на 9A19103F-16F7-4668-BE54-9A1E7A4F7556. Кажется, что это ожидаемо - есть новый гид для типов проектов C# - но, возможно, это связано?

1 ответ

Догадаться. Я не знаю точно, почему, но это нежелательное поведение можно обойти, изменив GUID типа проекта для SDK на 9A19103F-16F7-4668-BE54-9A1E7A4F7556 в файле решения перед его загрузкой.

Кажется, что когда VS выполняет автоматическое обновление до нового GUID типа проекта, он не может правильно определить конфигурации проекта и по умолчанию использует только Release и Debug.

Я понял, что в моем случае в обновленном файле.csproj не было <Configurations> узел, который, по-видимому, означает только Debug а также Release определены.

Попробуй добавить

<Configurations>Debug;Release;DebugLinux;ReleaseLinux;DebugMac;ReleaseMac</Configurations>
Другие вопросы по тегам