我看了看C:\Program Files\Microsoft.NET
,我看不到任何SN.exe
文件.
我安装了.NET 3.5运行时; 还不够吗?
我的机器上有两个不同版本的同一个项目.一个来自代码中继,另一个来自代码分支.这些项目使用.pfx键来启用强命名.当我第一次尝试编译项目的trunk版本时,我收到以下错误:
无法导入以下密钥文件:sgKey.pfx.密钥文件可能受密码保护.要更正此问题,请尝试再次导入证书,或使用以下密钥容器名称手动将证书安装到强名称CSP:VS_KEY_45891C38BC1BB345
要解决此问题,我使用sn.exe和以下命令:
sn -i sg Key.pfx VS_KEY_45891C38BC1BB345
这解决了trunk项目的问题,然后愉快地构建.
但是,当我尝试构建项目的分支版本时,我收到相同的初始错误(具有相同的密钥容器名称),当我尝试使用sn.exe安装证书时(不出意外)给出以下错误:
无法安装密钥对 - 对象已存在
这是有道理的,因为我在sn命令上使用了相同的infile和容器,但我想要了解的是:
当我使用强名称工具创建一个新的密钥来签署.NET程序集时,我得到一个Access is Denied错误消息.这在Windows XP机器上运行得很好,但它在我的Vista机器上不起作用.
PS C:\users\brian\Dev\Projects\BELib\BELib> sn -k keypair.snk
Microsoft (R) .NET Framework Strong Name Utility Version 3.5.21022.8
Copyright (c) Microsoft Corporation. All rights reserved.
Failed to generate a strong name key pair -- Access is denied.
Run Code Online (Sandbox Code Playgroud)
是什么导致了这个问题,我该如何解决?
您是否以管理员身份运行PowerShell或命令提示符?在您习惯用户访问控制或关闭用户访问控制之前,我发现这是第一个查看的地方.
是的我尝试以管理员身份运行PS和常规命令提示符.出现相同的错误消息.
我需要创建post build事件来执行以下操作:
sn -i MyKey.pfx MyKeyContainerName
tlbimp $(ConfigurationName)\MyCom.tlb /out:$(ConfigurationName)\NETMyCom.dll /keycontainer:MyKeyContainerName
sn -d MyKeyContainerName
Run Code Online (Sandbox Code Playgroud)
当Visual Studio执行第一个语句时,它需要一个密码并等待用户指定并失败.
Microsoft(R).NET Framework强名称实用程序版本2.0.50727.42版权所有(c)Microsoft Corporation.版权所有.
输入PKCS#12密钥文件的密码:无法解析mykey.pfx中的PKCS#12 blob - 句柄无效.
我尝试使用sn命令行参数指定密码,但我看不到这样做的方法.
请帮忙.
此致,希尔米.
我想运行sn.exe,以便能够在服务器中运行延迟签名的项目.如果我安装整个Windows SDK一切运行顺利,但需要哪个部分SDK?我问,因为整个下载是460Mb,可能安装我不需要的东西.
有没有人弄清楚为什么.net 4.0的sn.exe
崩溃如果在外面运行崩溃C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\NETFX 4.0 Tools\
?(使用Windows XP,32位)
Visual Studio 2010工作得很好,sn工作在NETFX 4.0工具中(直接调用或在PATH上调用).
.net 3.5版本(来自..\Bin)工作正常,可以移动.
我只是试图获得一个自动构建,但似乎sn.exe需要住在它的位置......这可能是什么?我错过了一些明显的东西吗
我有一个应用程序与接下来的两个后编译命令:
call editbin /LARGEADDRESSAWARE $(TargetPath)
call editbin /LARGEADDRESSAWARE $(ProjectDir)obj\$(PlatformName)\$(ConfigurationName)\$(TargetFileName)
Run Code Online (Sandbox Code Playgroud)
并且工作正常.
但是当我发布到服务器时,ClickOne应用程序没有错误,但是当我尝试在客户端安装时,文件的哈希值与清单中计算的值不同.
我试着使用下一个命令:
sn -Ra $(ProjectDir)obj\$(PlatformName)\$(ConfigurationName)\$(TargetFileName) PublicPrivateKeyFile.snk
Run Code Online (Sandbox Code Playgroud)
但不起作用,它显示下一条消息:
app.exe不代表任何强名称程序集.
我想这是因为我的所有项目都有"签署程序集"选项,并带有false值.在使用LARGEADDRESSAWARE之前,ClickOnce应用程序运行正常.
为所有项目设置"签署程序集"选项的真值是必要的,还是有任何方法可以为此选项使用带有false值的LARGEADDRESSAWARE?
编辑:
Mark Sowul的解决方案工作正常:我还在AfterBuild中添加了下一行以检查AfterCompile是否正常工作
call "$(VS110COMNTOOLS)vsvars32.bat"
dumpbin /headers "$(TargetPath)" > "$(TargetPath).info"
findstr "(>2GB)" "$(TargetPath).info"
set BUID_ERRORLEVEL=%ERRORLEVEL%
del "$(TargetPath).info"
if [%BUID_ERRORLEVEL%]==[0] echo EXE program updated to use more than 2GB
if [%BUID_ERRORLEVEL%]==[1] echo ERROR: EXE PROGRAM WAS NOT UPDATED TO USE MORE THAN 2GB
set ERRORLEVEL=%BUID_ERRORLEVEL%
Run Code Online (Sandbox Code Playgroud) 我用这个命令创建了一个密钥文件:
sn.exe -k 2048 Build.snk
我想用.NET阅读这个密钥.我无法找到任何关于.snk格式的文档,所以我想知道C#中是否有一种读取.snk文件的方法?
我提出问题的原因是将.snk文件用于签署程序集以外的目的.作为下面的答案之一,.snk文件的目的实际上只是用于签署程序集.
我无法导入程序集,据说是因为强名称验证失败,尽管即使我注册了不检查的程序集,也会发生这种情况。有人可以发现我在这里做错了吗?
以下是抄录。作为参考,sn.exe 的开关是:
-Vr:注册程序集以进行验证跳过。
PS C:\temp> .\sn.exe -v .\my.dll
Microsoft (R) .NET Framework 强名称实用程序版本 3.5.30729.1 版权所有 (c) Microsoft Corporation。版权所有。
程序集 '.\my.dll' 有效
PS C:\temp\Cmdlets> Import-Module .\my.dll Import-Module :无法加载文件或程序集“my,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。强名称验证失败。(来自 HRESULT 的异常:0x8013141A)在 line:1 char:14
PS C:\temp\Cmdlets> .\sn.exe -Vr *
Microsoft (R) .NET Framework 强名称实用程序版本 3.5.30729.1 版权所有 (c) Microsoft Corporation。版权所有。
为程序集 ' , '添加了验证条目
PS C:\temp\Cmdlets> Import-Module .\my.dll Import-Module :无法加载文件或程序集“my,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。强名称验证失败。(来自 HRESULT 的异常:0x8013141A)在 line:1 char:14
sn.exe ×9
.net ×6
c# ×4
strongname ×2
.net-4.0 ×1
certificate ×1
clickonce ×1
delay-sign ×1
deployment ×1
duplicates ×1
encryption ×1
msbuild ×1
signing ×1
winapi ×1