自最近升级以来新生成的 GeneratedMSBuildEditorConfig 文件

Posted

技术标签:

【中文标题】自最近升级以来新生成的 GeneratedMSBuildEditorConfig 文件【英文标题】:New generated GeneratedMSBuildEditorConfig file since recent upgrade 【发布时间】:2021-01-22 06:33:46 【问题描述】:

我一直在升级一个项目,自从安装了最新版本的 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>

【讨论】:

认为您可能错过了$(IntermediateOutputPath)$(MSBuildProjectName) 之间的反斜杠 @ceej 我可以确认需要反斜杠。没有文件被重新创建。 您可以通过将其放入 Directory.Build.targets 文件(不是 .props,因为 $IntermediateOutputPath 在加载 .props 文件的阶段尚不可用)为许多项目部署一次解决方法 似乎在刚刚发布的 VS 2019 16.9 或 .NET SDK 5.0.2 中已修复。我已经删除了额外的设置,并没有再次看到在项目根目录上生成的文件。 对我来说,这在 VS 16.9.2 和 dotnet SDK 5.0.201 中仍未修复。但该变通方法非常适用于这些非 SDK 风格的项目。谢谢!【参考方案2】:

正确的拉取请求是this one——它是作为某些 MSBuild 逻辑将值传递给某些 Roslyn 分析器的一种方式而构建的。这是内部实现细节,不应签入源代码管理。

我很惊讶你注意到了这个文件——它应该被生成到你的 obj\ 目录中,你应该已经从源代码管理中排除了它,并且从一开始就没有真正注意到它。它是在其他地方生成的吗?

【讨论】:

不是 OP,但对我来说,文件是在项目的根目录中生成的。 (例如ProjectName\ProjectName.GeneratedMSBuildEditorConfig.editorconfig)。我怎样才能解决这个问题? BaseIntermediateOutputPathIntermediateOutputPath的值分别是obj\obj\x64\Debug\ (作为问题发布在这里:github.com/dotnet/roslyn/issues/48430) Jason,我看到了与@Bouke 相同的行为。它是在项目根目录中创建的。

以上是关于自最近升级以来新生成的 GeneratedMSBuildEditorConfig 文件的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Passport 无法验证我新生成的令牌

我如何将这个新生成的图像上传到我的 localhost/images/

Javascript 不适用于 ujs 新生成的 DOM 元素

arcgis python 新生成的数据设置

如何使用新生成的 .pot 文件更新现有的 .po 文件?

关于在程序中 文件新生成 在用os.system()程序对新生成的文件处理 举个栗子 如下: