visual-studio - 在调试和发布配置之间指定单独的 .editorconfig 文件
问题描述
我正在使用 VS 2019 16.8.3,我想在解决方案 .editorconfig 文件中指定一些代码分析规则(dotnet_diagnostic.CAXXXX.severity),仅用于发布版本。
当我在 .editorconfig 文件中添加规则时,调试构建时间会增加几分钟。项目属性中的所有分析器复选框均未选中“在构建时运行”。
所以我想从代码分析中排除调试构建。是否可以仅为发布版本指定 .editorconfig 文件?
或者是否可以为构建禁用此 .editconfig 并仅适用于手动代码分析?
解决方案
TLDR
您可以像这样设置.editorconfig
文件Directory.Build.props
:
<Project>
<ItemGroup Condition="'$(Configuration)'=='Debug'">
<EditorConfigFiles Include="xxx\debug.editorconfig" Link=".editorconfig"/>
</ItemGroup>
<ItemGroup Condition="'$(Configuration)'=='Release'">
<EditorConfigFiles Include="xxx\release.editorconfig" Link=".editorconfig"/>
</ItemGroup>
</Project>
深潜
我们公司也有同样的问题。我们想为调试和发布配置的一个特定规则设置不同的严重性。我们想要这样做的原因是,当开发人员在开发环境中(在他/她的计算机中)收到警告时,拉取请求在 Azure DevOps 环境中的项目或解决方案构建阶段出现错误。
顺便说一句,我们有一个名为CodingGuideline的存储库来存储我们的.editorconfig
文件并引用一些分析器,如StyleCop。同时,这个存储库是一个 nuget 包。我们所有的存储库都引用了这个包。
我们有一些解决方案如下:
解决方案 1
我们可以存储
.editorconfig
和review.editorconfig
分离文件。开发人员已经有存储库目录来保存公司存储库,并且每个人都.editorconfig
手动放入该目录中。(如果您不想手动放置配置文件,可以尝试解决方案 2)这样,整个存储库将遵循相同的代码样式和编码规则。如果任何开发人员创建拉取请求,CodingGuideline存储库将自动克隆到构建目录。克隆后,
review.editorconfig
文件被复制命名为.editorconfig
. 而已。当运行 dotnet build 命令并且定义的某些规则review.editorconfig
被破坏时,拉取请求将引发错误。
解决方案 2
如果我们不想手动放置配置文件,我们可以通过 nuget 包部署配置文件。在此选项中,我们存储
development.editorconfig
和review.editorconfig
分隔文件。我们不能使用文件名,.editorconfig
因为我们无法部署具有此名称的文件。我们应该在CodingGuideline
CodingGuideline.targets
nuget 包存储库中创建( ProjectName.targets ) 文件,并将此代码放入其中以复制为.development.editorconfig
.editorconfig
<Project> <Target Name="CodingGuidelineEditorConfig" AfterTargets="BeforeBuild" BeforeTargets="CoreBuild"> <Copy SourceFiles="$(MSBuildThisFileDirectory)\development.editorconfig" DestinationFiles=".editorconfig" /> </Target> </Project>
当我们将CodingGuideline引用添加到任何带有 的存储库时,
CodingGuideline.targets
将自动触发并将.editorconfig
文件复制到每个项目的根目录。拉取请求部分与解决方案 1 相同。
概括
如您所见,我们实际上不需要Directory.Build.props
对这两种解决方案进行定义。但是,当然,如果您想将两个配置文件都保留在项目中,我不能干涉您的业务。
顺便说一句,我们决定使用.editorconfig而不是ruleset。因为本文档说,如您所说,不推荐使用规则集,并且他们建议使用.editorconfig。
我认为第一个解决方案比第二个解决方案好。因为.editorconfig
文件在目录级别是唯一的,所以没有一个存储库/解决方案/项目包含.editorconfig
文件。但是开发人员必须.editorconfig
手动将文件放入根存储库目录。
恰恰相反,第二种解决方案更加自动化,但整个存储库必须包含.editorconfig
. 也许有一种方法可以从解决方案资源管理器中隐藏它,但我无法完全研究。
推荐阅读
- javascript - 减少以日期为键的 JavaScript 对象数组?
- java - Spring @Transactional 没有返回到 Hikari 池的连接
- typescript - 调用类型化的通用深度排序方法
- python - Python 列表到 sqlite
- pandas - Pandas:将复数列转换为模数和参数列
- matplotlib - 每次我更改“figsize”时,大小都不会改变
- c - 如何不为空终止缓冲区?
- mysql - 连接两个表然后计算两列之间的时间差
- r - 将经度/纬度坐标转换为兰伯特等角圆锥投影
- android - 如何验证函数在 Runnable::run() 中被调用