如何解决构建服务器上的CS0281错误?
解决VS2022流水线构建InternalsVisibleTo密钥不匹配问题
问题根源
VS2022配套的MSBuild对强名称签名的处理逻辑和VS2013不一样,错误里的0012a1b2是公钥令牌(PublicKeyToken),而你用sn -tp生成的是完整公钥,这俩不是一回事。
调整步骤
- 修正InternalsVisibleTo格式:如果DAL是强签名程序集,
InternalsVisibleTo需要填测试程序集的公钥令牌,不是完整公钥。把错误里的0012a1b2替换到DAL项目的属性中,格式如下:[assembly: InternalsVisibleTo("ABC.Test, PublicKeyToken=0012a1b2")] - 对齐签名配置:VS2022的默认签名设置可能和VS2013不同,要确保流水线里测试项目
ABC.Test的签名配置和本地一致:- 本地用VS2022打开测试项目,右键属性→签名,确认“为程序集签名”的选项、密钥文件和延迟签名设置
- 流水线的MSBuild命令要带上对应的签名参数,比如
/p:AssemblyOriginatorKeyFile=你的密钥文件.snk /p:SignAssembly=true(延迟签名就加/p:DelaySign=true)
- 直接提取正确令牌:不确定令牌的话,找到测试项目构建出的
ABC.Test.dll,用命令sn -T ABC.Test.dll(注意是大写T)直接提取公钥令牌,把这个值填到InternalsVisibleTo里就行 - 清理流水线缓存:旧的构建缓存可能干扰签名结果,在流水线中加一步清理操作,删除构建目录下的所有旧输出文件,再重新构建
内容的提问来源于stack exchange,提问作者rb29
相关产品推荐
相关产品推荐

