Почему VS 2017 меняет раздел ProjectConfigurationPlatforms моего файла решения? - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть приложение на 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.

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

Спасибо!

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

1 Ответ

0 голосов
/ 19 февраля 2019

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...