我看着C:\Program Files\Microsoft.NET
,我看不到任何SN.exe
文件。
我安装了.NET 3.5运行时; 这还不够?
我看着C:\Program Files\Microsoft.NET
,我看不到任何SN.exe
文件。
我安装了.NET 3.5运行时; 这还不够?
您需要安装Windows SDK 6.0A,而不仅仅是运行。
如果您已经安装了VS2008,你会发现它已经安装,并SN.EXE将在这里:
C:\ Program Files文件\微软的SDK \的Windows \ v6.0A \ BIN \ SN.EXE
否则,如果你没有安装VS2008,你可以单独下载SDK 这里 。
该文件SN.EXE是不是在SDK中提供。 该SDK的最新版本是6.1,也许他们删除了此版本SN.EXE。
cd \
dir /s sn.exe
你会得到输出像
Volume in drive C has no label.
Volume Serial Number is XXXX-XXXX.
目录C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin
11/07/2007 12:01 PM 95,728 sn.exe
1 File(s) 95,728 bytes
你找到的目录:)
如果没有,没有sn.exe
在您的系统。 安装SDK即可。
这是SDK的一部分(.NET,或现在的Windows SDK )
我敢肯定,你有你的理由-有绝对充足的情况下, SN.exe
是不可避免的和/或适当的(延迟签名一)。 (我+1过Q和接受了,我不争辩他们以任何方式的优点,所以请忽略这一点,如果它没有在您的案件,不适用)
需要注意的是SN.exe
很少需要在实践中-在布线Microft.<lang>.targets
驱动所述编译器[和AL.exe
等]所有[有效]取SignAssembly
在.proj文件标志考虑并有条件地传递的关键编译器(S)等,所以它可以做所有的工作在装配在线(主要用于PERF原因)的单点触摸。
这种逻辑还涉及区分.snk
和.pfx
键(这是密码保护,得到分泌到密钥容器)。 根据该表格上,有那么无论是KeyContainerName
或KeyOriginatorFile
通过解决财产Microsoft.Common.targets
在运行目录-搜索ResolveKeySource
。
如果您需要做的原因SN
是因为你刚刚改写的组件,相同的图案,一般应持,即Mono.Cecil
和工具一拉PostSharp(我假设,未证实)通常也采取同样的参数和/或可制成做签约的内联。
<Target Name="ResolveKeySource"
Condition="$(SignManifests) == 'true' or $(SignAssembly) == 'true'">
<ResolveKeySource ...
KeyFile="$(AssemblyOriginatorKeyFile)"
CertificateFile="$(ManifestKeyFile)"
SuppressAutoClosePasswordPrompt="$(BuildingInsideVisualStudio)">
<Output TaskParameter="ResolvedKeyFile" PropertyName="KeyOriginatorFile" ..."/>
<Output TaskParameter="ResolvedKeyContainer" PropertyName="KeyContainerName" ... "/>
<Csc ...
KeyContainer="$(KeyContainerName)"
KeyFile="$(KeyOriginatorFile)" />
为了完整起见,这里是如何以编程方式推断出相关的正在编译目标的SDK路径(在4.0,但同样的方法测试的是所有可能的方式回到2.0,即Microsoft.Common.targets
已经处理这一数据在一段时间):
<Target Name="ResolveSNToolPath" Condition=" 'true' == '$(SignAssembly)' ">
<PropertyGroup>
<_SdkToolsBinDir Condition=" '' == '$(_SdkToolsBinDir)' ">$(TargetFrameworkSDKToolsDirectory)</_SdkToolsBinDir>
<SNToolPath Condition=" '' == '$(SNToolPath)' ">$(_SdkToolsBinDir)SN.exe</SNToolPath>
</PropertyGroup>
<Error Condition=" 'true' == '$(SignAssembly)' AND !EXISTS( '$(SNToolPath)' )"
Text="In order to resign the assembly, this package requires access to the SN.EXE tool from the Windows Platform SDK, which was not found.
The location derived was "$(SNToolPath)".
Please either:
1) supply a correct path to your SDK Tools bin directory containing SN.EXE by setting %24(_SdkToolsBinDir) or %24(TargetFrameworkSDKToolsDirectory)
OR
2) supply a correct complete path to your SN.EXE signing tool by setting %24(SNToolPath)" />
</Target>
为了全面完整,这里是你将如何利用这一进程来运行SN.EXE的输出
<Target Name="ResignMyAssembly" Condition="$(SignAssembly) == 'true'">
<Exec Condition=" '$(KeyContainerName)' != '' "
Command=""$(SNToolPath)" -Rca "@(MyAssembly)" "$(KeyContainerName)" " />
<Exec Condition=" '$(KeyContainerName)' == '' "
Command=""$(SlpsSdkProtectSnTool)" -Ra "@(MyAssembly)" "$(KeyOriginatorFile)" " />
对于VS2017路径更改为: C:\Program Files (x86)\Microsoft SDKs\Windows\vX\bin\NETFX XXX Tools\
。
不,看起来你需要的SDK :(
仅供参考,运行时本身不会成为下C:\Program Files\Microsoft.NET
-它所有的文件都[唯一]在C:\Windows\Microsoft.NET\vXXXXXX\