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

#roslyn #editorconfig

#roslyn #editorconfig

Вопрос:

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

MyProjectName.GeneratedMSBuildEditorConfig.editorconfig

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

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

Ответ №1:

Обновление: это исправлено в Visual Studio 16.9 и выше.


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

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

 <PropertyGroup>
    <GeneratedMSBuildEditorConfigFile>$(IntermediateOutputPath)$(MSBuildProjectName).GeneratedMSBuildEditorConfig.editorconfig</GeneratedMSBuildEditorConfigFile>
</PropertyGroup>
  

Комментарии:

1. Думаю, вы могли пропустить обратную косую черту между $(IntermediateOutputPath) и $(MSBuildProjectName)

2. @ceej Я могу подтвердить, что обратная косая черта необходима. Без воссоздания файла.

3. Вы можете развернуть обходной путь один раз для многих проектов, поместив его в каталог. Файл Build.targets (не .props, поскольку $IntermediateOutputPath еще недоступен на этапе загрузки файла .props)

4. Похоже, это исправлено в версии 2019 16.9 или .NET SDK 5.0.2, который только что выпущен. Я удалил дополнительную настройку и больше не видел файл, созданный в корне проекта.

5. Для меня это все еще не исправлено в VS 16.9.2 и dotnet SDK 5.0.201. Но обходной путь отлично работает для этих проектов, отличных от SDK. Спасибо!

Ответ №2:

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

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

Комментарии:

1. Не OP, но для меня файл создается в корне проекта. (например ProjectNameProjectName.GeneratedMSBuildEditorConfig.editorconfig ). Как я могу это исправить? Значения BaseIntermediateOutputPath и IntermediateOutputPath равны obj и objx64Debug соответственно.

2. (Опубликовано как проблема здесь: github.com/dotnet/roslyn/issues/48430 )

3. Джейсон, я вижу то же поведение, что и @Bouke. Он создается в корне проекта.