Новый сгенерированный файл GeneratedMSBuildEditorConfig после недавнего обновления

Я обновлял проект и с момента установки последней версии Visual Studio 2019 обнаружил, что следующий файл выводится на диск

MyProjectName.GeneratedMSBuildEditorConfig.editorconfig

Я думаю, что это связано с компилятором roslyn и было представлено в этом коммите: //github.com/dotnet/roslyn/commit/de348c5a77977459a4138de0a62487e00980e28a#diff-e87b4990385fcfea8cf3f744bb8ad23e

Возникли очевидные вопросы о том, что это за файл, что он делает и должен ли он быть в системе контроля версий или исключен. Я знаю, для чего нужны файлы .editorconfig, но это было неожиданно. Мои поиски ничего не дали. Кто-нибудь может пролить свет на это?


person ceej    schedule 07.10.2020    source источник


Ответы (2)


Обновление. Исправлено в Visual Studio 16.9 и более поздних версиях.


Существует ошибка при использовании устаревших/не в стиле SDK проектов, из-за которой эти файлы выводятся в неправильное место. У нас есть исправление для этого здесь: https://github.com/dotnet/roslyn/pull/48781

Тем временем в качестве обходного пути вы можете явно указать путь вывода сгенерированного файла, добавив следующее в файл проекта:

<PropertyGroup>
    <GeneratedMSBuildEditorConfigFile>$(IntermediateOutputPath)\$(MSBuildProjectName).GeneratedMSBuildEditorConfig.editorconfig</GeneratedMSBuildEditorConfigFile>
</PropertyGroup>
person Chris Sienkiewicz    schedule 26.10.2020
comment
Думаю, вы могли пропустить обратную косую черту между $(IntermediateOutputPath) и $(MSBuildProjectName) - person ceej; 06.11.2020
comment
@ceej Я могу подтвердить, что нужна обратная косая черта. Без пересоздания файла. - person stev-e; 31.12.2020
comment
Вы можете развернуть обходной путь один раз для многих проектов, поместив его в файл Directory.Build.targets (не .props, поскольку $IntermediateOutputPath еще не доступен на этапе загрузки файла .props) - person Melvyn; 08.01.2021
comment
Кажется, это исправлено в VS 2019 16.9 или только что выпущенном .NET SDK 5.0.2. Я удалил дополнительную настройку и больше не видел файл, сгенерированный в корне проекта. - person ChrisTorng; 05.03.2021
comment
Для меня это все еще не исправлено в VS 16.9.2 и dotnet SDK 5.0.201. Но обходной путь отлично работает для этих проектов, отличных от SDK. Спасибо! - person Tom Pažourek; 22.03.2021

Правильный запрос на извлечение — вот этот — он создан как способ для некоторой логики MSBuild. для передачи значений определенным анализаторам Roslyn. Это внутренняя деталь реализации, и ее не следует возвращать в систему управления версиями.

Я удивлен, что вы заметили этот файл — он должен быть сгенерирован в вашем каталоге obj\, который вы должны были уже исключить из системы управления версиями и никогда не замечать. Он сгенерирован где-то еще?

person Jason Malinowski    schedule 07.10.2020
comment
Не ОП, но для меня файл создается в корне проекта. (например, ProjectName\ProjectName.GeneratedMSBuildEditorConfig.editorconfig). Как я могу это исправить? Значения BaseIntermediateOutputPath и IntermediateOutputPath равны obj\ и obj\x64\Debug\ соответственно. - person Bouke; 08.10.2020
comment
(Размещено здесь как проблема: github.com/dotnet/roslyn/issues/48430) - person Bouke; 08.10.2020
comment
Джейсон, я вижу то же поведение, что и @Bouke. Он создается в корне проекта. - person ceej; 08.10.2020