Почему 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>