52

我看了看C:\Program Files\Microsoft.NET,我看不到任何SN.exe文件。

我安装了 .NET 3.5 运行时;这还不够吗?

4

8 回答 8

83

您需要安装 Windows SDK 6.0a,而不仅仅是运行时。

如果你安装了 VS2008,你会发现它已经安装好了,sn.exe 会在这里:

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\sn.exe

否则,如果您没有安装 VS2008,您可以在此处单独下载 SDK 。

SDK 中没有 sn.exe 文件。SDK的当前版本是6.1,也许他们在这个版本中删除了sn.exe。

于 2009-10-08T06:15:07.217 回答
19
  • 打开命令提示符
  • 类型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。

于 2012-09-28T10:39:41.107 回答
4

我相信你有你的理由——而且肯定有很多情况SN.exe是不可避免的和/或适当的(延迟签约)。(而且我已经 +1 了 Q 和接受的 A 并且没有以任何方式质疑它们的优点,所以如果它不适用于您的情况,请忽略这一点)

请注意,这SN.exe在实践中很少需要 -Microft.<lang>.targets驱动编译器 [AL.exe等] 的接线都 [有效] 考虑SignAssembly.proj 文件中的标志,并有条件地将密钥传递给编译器等,所以它可以在一次内联装配中完成所有工作(主要是出于性能原因)。

.snk此逻辑还处理和.pfx密钥(受密码保护并被秘密到密钥容器中)之间的区别。根据哪种形式,然后在运行时目录中有一个KeyContainerNameKeyOriginatorFile属性解析Microsoft.Common.targets- 搜索ResolveKeySource.

如果您需要执行 a 的原因SN是因为您刚刚重写了一个程序集,那么通常应该采用相同的模式,即Mono.CecilPostSharp 工具(我假设,未确认)通常也采用相同的参数和/或可以进行进行内联签名。


Microsoft.Common.targets 摘录

<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" ... "/>

Microsoft.CSharp.targets 摘录

    <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 &quot;$(SNToolPath)&quot;.

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="&quot;$(SNToolPath)&quot; -Rca &quot;@(MyAssembly)&quot; &quot;$(KeyContainerName)&quot; " />
  <Exec Condition=" '$(KeyContainerName)' == '' " 
    Command="&quot;$(SlpsSdkProtectSnTool)&quot; -Ra &quot;@(MyAssembly)&quot; &quot;$(KeyOriginatorFile)&quot; " />

于 2013-05-09T14:59:41.163 回答
3

它是 SDK(.NET,或现在的Windows SDK)的一部分

于 2009-10-08T06:10:49.440 回答
3

对于 VS2017 路径已更改为: C:\Program Files (x86)\Microsoft SDKs\Windows\vX\bin\NETFX X.X.X Tools\.

于 2018-10-02T11:17:07.847 回答
2

简单地:

在windows中(根据.net framework版本\B8.1A..改变路径),转到=>

C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 工具

编写你的sn.exe命令:

sn -i D:\XX\MYProject.UI.api\MYProject.Gateway\my_certificate.pfx VS_KEY_AD6FD8AFB39B6C43

如果它受密码保护,那么它会希望 pwd 把它写下来

于 2019-07-04T11:53:55.840 回答
1

不,看起来你需要 SDK :(

仅供参考,运行时本身不会在C:\Program Files\Microsoft.NET- 它的所有文件 [仅] 在C:\Windows\Microsoft.NET\vXXXXXX\

于 2009-10-08T06:11:14.743 回答
1

对于 VS2019,路径是 C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\x64\sn.exe

现在我仍然无法使用 VS 命令提示符。它向我显示消息

** Visual Studio 2017 开发人员命令提示符 v15.8.9 ** 版权所有 (c) 2017 Microsoft Corporation

[vcvarsall.bat] 环境初始化为:'x64'

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community>其中 sn.exe 信息:找不到给定模式的文件。

于 2019-07-04T05:59:10.010 回答