遇到CS0272错误:友元程序集无法访问属性的internal set访问器
解决签名程序集下InternalsVisibleTo无法访问内部Set访问器的问题
问题根源
签名程序集后,CLR对InternalsVisibleTo特性的身份验证会严格执行,只要公钥填写错误、格式不符或程序集名称不匹配,都会导致内部成员(包括属性的internal set访问器)无法被友元程序集识别。
具体解决方案
获取并填写完整公钥:
禁止使用公钥令牌,必须填入友元程序集的完整公钥。可通过.NET SDK自带的sn.exe工具获取:sn -Tp FriendAssembly.dll复制输出的完整公钥字符串(注意不要包含公钥令牌部分),直接粘贴到
InternalsVisibleTo特性的PublicKey=后方。严格遵循特性语法格式:
特性字符串里的逗号后不能加空格,公钥部分需连续无换行,正确格式示例:[assembly: InternalsVisibleTo("FriendAssembly,PublicKey=00240000048000009400000006020000002400005253413100040000010001003835e39d7f82273e29c5a6c4f8b3b6a5d2f7e1e5b5a4e6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1")]确认程序集名称准确:
特性中的FriendAssembly必须是目标友元程序集的简单名称(不含.dll或.exe后缀),若友元程序集带强名称,名称需与其程序集定义里的AssemblyName完全一致。
验证步骤
修改特性后重新编译两个程序集,在友元程序集中尝试访问属性的set访问器。若仍报错,检查公钥是否完整复制(不可遗漏任何字符),或用ildasm.exe查看主程序集元数据,确认InternalsVisibleTo特性是否正确写入。
内容的提问来源于stack exchange,提问作者Sudesh
相关产品推荐
相关产品推荐

