Visual Studio 可以使用不在目录层次结构中的 .editorconfig 吗?

Can Visual Studio use an .editorconfig not in the directory hierarchy?

我们有大量的解决方案分布在大量的存储库中,这些存储库并不总是以一种使我们更容易更新 .editorconfig 的方式共享目录层次结构,使其适用于所有 projects/solutions 在组织中。我们目前通过内部 NuGet 包应用我们所有的代码分析配置,我希望我们也能以这种方式包括我们组织范围内的 .editorconfig 设置?

我尝试了一个快速实验,将以下内容添加到项目中以查看链接文件是否会被接受(因为我们可以简单地将其添加到 NuGet 包中已有的 props 文件中),但它似乎没有当前受到尊重。

  <ItemGroup>
    <None Include="C:\SomeAlternatePath\ECTest\.editorconfig" Link=".editorconfig" />
  </ItemGroup>

我们是否可以使用其他一些 MSBuild 属性 或机制来更好地促进这一点,而无需逐字地向每个 solution/project/repo 写入重复文件?

Is there some other MSBuild property or mechanism we could use to better facilitate this without literally writing a duplicate file to every solution/project/repo?

恐怕答案是否定的。导致 .editorconfig 文件与 msbuild 或 xx.csproj 无关。只有 文件层次结构 可以影响配置文件的工作方式。更多详情请查看this document.

一些测试:

当我右击项目=>添加.editorconfig在当前项目中添加这个文件时,在xx.csproj中添加了一行:<None Include=".editorconfig"/>

如果我们设置 indent_size = 32,它适用于当前项目。现在我们可以 right-click that file=>Exclude from Project 从当前项目系统中删除该文件。 (此操作将删除 xx.csproj 中的 <None Include=".editorconfig"/>,但该文件仍在 xx.csproj 所在的同一文件夹中)

现在重新加载项目,设置(indent_size=32)仍然有效。所以很明显,如果我们把这个文件放在项目目录下,那么它就会生效,不管我们在项目文件中是否有关于它的定义(xx.csproj).

建议:

根据您的描述,您的所有项目都使用相同的 .editorconfig 文件。由于此文件的工作范围受文件层次结构的影响,您可以通过以下方式减少一些无意义的工作:

1.Place 解决方案文件夹中的那个文件,它将适用于该解决方案文件夹下的所有项目

2.Place repos(C:\Users\xxx\source\repos) 文件夹中的那个文件,它将适用于该文件夹下的所有解决方案和项目。

3.So 如果您的大部分解决方案都在路径 C:\somepath 下,请将该文件放在这里,该路径下的所有项目都将从中受益。关于 file hierarchy 中的 precedence 请参阅 this one.

希望以上内容对您有所帮助:)