使用IgnoresAccessChecksToAttribute无法访问引用项目internal类型怎么办
常见问题排查点
- 重复定义
IgnoresAccessChecksToAttribute
.NET 5 框架本身已经内置了
System.Runtime.CompilerServices.IgnoresAccessChecksToAttribute,你无需在项目中手动重复定义该特性。自定义的同名同命名空间特性会覆盖系统内置版本,导致编译器无法识别对应的忽略访问控制逻辑。
解决方法:删除你代码中整个IgnoresAccessChecksToAttribute类定义,仅保留程序集特性声明即可:
[assembly: IgnoresAccessChecksTo("MyOtherProject")]
- 未开启编译器对
IgnoresAccessChecksTo的支持
SDK 风格项目默认不会在编译期识别
IgnoresAccessChecksToAttribute的作用,需要手动在引用MyOtherProject的项目的.csproj文件的<PropertyGroup>节点下添加如下配置:
<Features>IgnoresAccessChecksTo</Features>
- 程序集名称不匹配
IgnoresAccessChecksTo特性中传入的字符串必须和MyOtherProject项目的程序集名称完全一致,包括大小写。你可以右键MyOtherProject项目 → 属性 → 常规页面,查看「程序集名称」字段的实际值,确保和特性中传入的字符串无偏差。
- 项目引用配置缺失
部分版本的.NET SDK要求项目引用添加特殊配置才会开放内部类型访问权限,你可以修改
ProjectReference配置如下:
<ProjectReference Include="..\..\src\MyOtherProject\MyOtherProject.csproj"> <IncludeInternalTypes>True</IncludeInternalTypes> </ProjectReference>
替代方案(更推荐)
如果仅需要访问同解决方案下其他项目的internal类型,使用InternalsVisibleTo特性兼容性更好,无需修改csproj配置:
在MyOtherProject项目的任意代码文件(通常放在AssemblyInfo.cs中)添加如下声明即可:
[assembly: InternalsVisibleTo("你的主项目的程序集名称")]
内容的提问来源于stack exchange,提问作者Shadow
相关产品推荐
相关产品推荐

