在我的解决方案中有一些c ++项目(vcxproj),它们是真正的互操作项目。 一切都很好,直到我尝试为.net v3.5重建它们(最初以.net v4.5为目标)
我在项目文件中将版本字符串更改为“ v3.5”,将ilasm的路径更改为
“ C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ ilasm.exe”
一切都很好。
我构建了这些项目,制作了一个msi软件包并尝试安装它,但出现此错误:
程序集安装:hr = 8013141a失败
程序集错误:程序集'%1'的强名称签名验证失败。该程序集可能已被篡改,或者已被延迟签名,但未使用正确的私钥完全签名。
产品:MY_PROJECT-错误1937。在安装程序集'MY_PROJECT.Interop,Version =“ 5.3.0.0”,Culture =“ neutral”,PublicKeyToken =“ 0DC6B9046BBF1D8A”,ProcessorArchitecture =“ MSIL”'时发生错误。签名或目录无法验证或无效。结果:0x80131045。程序集接口:IAssemblyCacheItem,功能:提交,组件:{84C66D06-D31F-536F-B79F-71F7E5F4BFE3}
我检查了配置。 我使用Visual Studio 2013,并且也安装了VS 2010和一些SDK。 VS 2013使用SN的旧版本来签署我的项目,而该旧版本位于 “ C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ bin \ sn.exe”
仅在情况下,我将路径更改为sn工具4.5: “ C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Tools \ sn.exe”
我的互操作文件已安装,没有任何问题!
这是我用来创建密钥文件的顺序:
sn.exe -m
sn.exe -k CONTAINER-Authenticode.snk
sn.exe -i CONTAINER-Authenticode.snk CONTAINER
sn.exe -pc CONTAINER CONTAINER-Authenticode.pbk
添加了系统变量SN_ContainerName = CONTAINER; SN_Option = -Rc
我的问题是,为什么呢?我应该使用什么版本的SN,在哪里可以读到有关这方面的信息,以及在哪里出错?