Подтвердить что ты не робот

Не удалось найти sn.exe для подписи Assembly

Я просмотрел C:\Program Files\Microsoft.NET, и я не вижу файл SN.exe.

У меня установлено время выполнения .NET 3.5; недостаточно?

4b9b3361

Ответ 1

Вам нужно установить Windows SDK 6.0a, а не только время выполнения.

Если вы установили VS2008, вы обнаружите, что он уже установлен, и sn.exe будет здесь:

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

В противном случае, если у вас нет VS2008, вы можете скачать SDK отдельно здесь.

Файл sn.exe недоступен в SDK. Текущая версия SDK - 6.1, возможно, они удалили sn.exe в этой версии.

Ответ 2

  • открыть командную строку
  • type cd \
  • type 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.

Ответ 3

Это часть SDK (.NET, или теперь Windows SDK)

Ответ 4

Я уверен, что у вас есть свои причины - и, безусловно, есть много случаев, когда SN.exe является неизбежным и/или соответствующим (подписание задержки для одного). (И у меня есть +1 и Q, и я не оспариваю их достоинства, поэтому, пожалуйста, не обращайте внимания на это, если это не применимо в вашем случае)

Обратите внимание, что на практике редко требуется SN.exe - проводка в Microft.<lang>.targets, которая управляет компиляторами [и AL.exe и т.д.], все [эффективно] принимают флаг SignAssembly в файле .proj во внимание и условно передать ключ к компилятору и т.д., чтобы он мог выполнять всю работу одним касанием сборки inline (главным образом по первичным причинам).

В этой логике также рассматривается различие между клавишами .snk и .pfx (которые защищены паролем и секретируются в контейнер ключей). В зависимости от формы, тогда в каталоге Runtime в Microsoft.Common.targets разрешено свойство KeyContainerName или KeyOriginatorFile - Поиск ResolveKeySource.

Если причина, по которой вам нужно сделать SN, - это то, что вы только что перезаписали сборку, тот же шаблон обычно должен содержать, т.е. Mono.Cecil и инструменты a la PostSharp (я предполагаю, не подтвержден) вообще также принимают те же аргументы и/или могут быть сделаны для того, чтобы сделать подпись в строке.


Microsoft.Common.targets excerpt

<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 excerpt

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

Ответ 5

Для VS2017 путь был изменен на: C:\Program Files (x86)\Microsoft SDKs\Windows\vX\bin\NETFX XXX Tools\.

Ответ 6

Нет, похоже, вам нужен SDK для этого: (

FYI, само время выполнения не будет находиться под C:\Program Files\Microsoft.NET - все его файлы будут жить [только] в C:\Windows\Microsoft.NET\vXXXXXX\

Ответ 7

Для 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

[vcvarsall.bat] Среда инициализирована для: 'x64'

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community>, где sn.exe ИНФОРМАЦИЯ: Не удалось найти файлы для данного шаблона (-ов).

Ответ 8

Просто:

В 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

если он защищен паролем, то он захочет записать его