.NET 6 强签名程序集配置InternalsVisibleTo属性失败求助
强签名.NET 6项目中InternalsVisibleTo的正确配置方式
核心问题原因
强签名程序集使用InternalsVisibleTo时,必须指定目标程序集的完整公钥字符串,既不能用公钥令牌,也不能附带版本、区域文化等额外信息,这是你之前配置报错的根本原因。
正确配置步骤
1. 提取目标测试程序集的完整公钥
使用.NET SDK自带的sn.exe工具(需打开VS开发者命令行或.NET CLI环境),执行以下命令从你的签名密钥文件中提取公钥:
sn -p Key.snk PublicKey.txt
打开生成的PublicKey.txt文件,复制其中的公钥内容(去掉所有换行和空格,是一串较长的十六进制字符串)。
2. 配置InternalsVisibleTo属性
有两种配置方式,推荐使用SDK风格项目的直接配置方式:
方式一:通过项目文件(.csproj)配置(推荐)
在A.dll项目的.csproj文件中添加以下内容:
<ItemGroup> <AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo"> <_Parameter1>A.Test, PublicKey=这里替换为你复制的完整公钥字符串</_Parameter1> </AssemblyAttribute> </ItemGroup>
方式二:通过AssemblyInfo.cs配置
如果你的项目仍保留Properties/AssemblyInfo.cs文件,在该文件中添加:
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("A.Test, PublicKey=这里替换为你复制的完整公钥字符串")]
关键注意事项
- 必须使用完整公钥字符串,而非公钥令牌(公钥令牌是公钥的哈希摘要,长度较短,不符合要求)。
- 属性值中仅保留程序集名称(
A.Test)和PublicKey=公钥字符串,不能添加版本号、Culture、PublicKeyToken等任何额外信息。
内容的提问来源于stack exchange,提问作者Marius Bancila
相关产品推荐
相关产品推荐

