You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:06:00