我需要创建post build事件来执行以下操作:
sn -i MyKey.pfx MyKeyContainerName
tlbimp $(ConfigurationName)\MyCom.tlb /out:$(ConfigurationName)\NETMyCom.dll /keycontainer:MyKeyContainerName
sn -d MyKeyContainerName当Visual执行第一条语句时,它需要一个密码,并等待直到用户指定它并失败。
微软(注册商标) .NET框架强名称实用软件版本2.0.50727.42版权(c)微软公司。版权所有。 输入PKCS#12密钥文件的密码:未能在mykey.pfx中解析PKCS#12 blob --句柄无效。
我试图使用sn命令行参数指定密码,但找不到一种方法。
请帮帮忙。
你好,希尔米。
发布于 2019-11-09 16:11:13
不幸的是,这里提到的任何方法对我都没有用。我得在码头集装箱里登记几个pfx。
因此,我使用sn.exe -i <infile> <container>重新开发了C#中的RSACryptoServiceProvider命令。源代码和应用程序都在GitHub上,在SnInstallPfx项目中。
SnInstallPfx应用程序接受PFX密钥及其密码。它自动计算密钥容器名称(VS_KEY_*) (借用MSBuild源代码),并将其安装到强名称CSP。
用法:
SnInstallPfx.exe <pfx_infile> <pfx_password>发布于 2012-06-01 14:45:03
如果像我一样,您没有使用TFS或MSBUILD来构建,那么至少还有两种其他方法:
( a)从脚本中运行sn.exe,并将密码写入stdin
有关这里示例,请参阅C#:
注意:使用.NET4版本的sn.exe,似乎不可能将其作为外部进程执行(至少在Windows上),并将密码写入stdin (我尝试使用python +和C#,而sn.exe似乎只是退出而不等待密码输入)。
( b)使用已安装的pfx重新签名密码。。
如果您已经安装了pfx文件,那么您可能知道容器名称(通常Visual使用类似于VS_KEY_ABAB1234ABAB1234的名称)
如果像我一样,您不知道或不记得容器名称,那么只需重新安装pfx文件:
sn -i myPfxFile VS_KEY_ABAB1234ABAB1234sn.exe将提示您输入密码,因为它在pfx文件中安装证书。
然后,您可以让sn.exe重新签名您的程序集,而不需要输入密码:
sn -Rca myAssembly.dll myVSkey以上内容可以用于构建脚本,因为不需要交互:-)
注意,请记住检查签名是否确实有效:
sn -v myAssembly.dll发布于 2013-02-02 00:42:30
我今天遇到了这个问题,我在ClickOnce C#应用程序中使用了一个ClickOnce DLL。
我在DLL上设置了延迟签名,然后使用编译后事件运行SN,如下所示:
ECHO <your-password-here> | sn.exe -R $(OutDir)$(TargetFileName) $(MSBuildProjectDirectory)<path-to-pfx-file>一定很喜欢传统的批处理方法。ECHO <your-password-here>打印您的密码,管道|将输出到SN.exe,SN.exe接受密码。
您可能不需要像我这样的延迟签名和-R交换机,但是您知道了。
编辑:这可能已经行不通了--我的答案是从2013年开始,当时我使用的是VS2010。
https://stackoverflow.com/questions/3138106
复制相似问题