#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. Он создается в корне проекта.