旧csproj迁移至SDK风格项目后.editorconfig的NU1603忽略规则失效
问题描述
现有基于旧式 .csproj 格式的解决方案,目标框架为 .NET Framework 4.8,使用 MSBuild 版本为 17.2.1.25201。
此前通过 .editorconfig 配置警告严重级别,示例配置如下:
[*.cs] # XXX 3.1.0.153 depends on YYY (>= 3.1.0) but YYY 3.1.0 was not found. # An approximate best match of YYY 3.1.0.69 was resolved. dotnet_diagnostic.NU1603.severity = none
该配置此前可正常生效,配置后 NU1603 警告不再显示。
项目迁移至新版 SDK 风格项目格式后,.editorconfig 中的上述配置失效,NU1603 警告重新出现。
迁移后使用的新 *.csproj 文件内容如下:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <ProjectGuid>{XXXX...}</ProjectGuid> <TargetFramework>net48</TargetFramework> <AssemblyTitle>My.Module</AssemblyTitle> <Product>My.Module</Product> <OutputPath>bin\$(Configuration)\</OutputPath> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <DebugType>full</DebugType> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <DebugType>pdbonly</DebugType> </PropertyGroup>
.editorconfig 文件存放在解决方案根目录,目录结构如下:
.\ .\My.ModuleA .\My.ModuleB .\My.sln .\.editorconfig
问题更新:经排查,仅 NU1603 这一特定警告无法被忽略,其余警告的忽略规则均可正常生效。
原因与解决方案
该问题不属于 MSBuild 或编译器故障,核心原因是 NuGet 警告的配置读取逻辑在 SDK 风格项目中存在明确的范围限制:
- 现有 NU1603 忽略规则写在
[*.cs]配置节下,该节规则仅对后缀为.cs的代码文件生效。旧式非 SDK 风格项目中,NuGet 还原警告与 C# 编译警告共用一套配置读取逻辑,因此该规则可以命中 NU1603;SDK 风格项目中 NuGet 还原是独立于 C# 编译的单独流程,不会读取绑定到.cs文件范围的诊断规则,因此该配置对还原阶段生成的 NU1603 无效。 - 其余警告规则可正常生效,是因为这些警告均为 C# 编译器处理
.cs文件时抛出,正好匹配[*.cs]的作用范围。
修复步骤
- 将 NU1603 的严重级别配置从
[*.cs]节移到.editorconfig的根配置节(无文件匹配前缀的全局区域),让规则覆盖整个目录下的所有构建流程,修改示例:
# 全局配置,作用于当前目录及所有子目录的全构建流程 dotnet_diagnostic.NU1603.severity = none [*.cs] # 其余仅针对C#代码文件的诊断规则保留在该节下
- 若上述修改后仍能看到 NU1603 警告,可在项目文件的
PropertyGroup节点中添加兜底配置,直接在构建层面忽略该警告:
<NoWarn>$(NoWarn);NU1603</NoWarn>
内容的提问来源于stack exchange,提问作者Rakoo
相关产品推荐
相关产品推荐

