Я просмотрел 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\Microsoft 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 во внимание и условно передать ключ к компилятору и т.д., чтобы он мог выполнять всю работу одним касанием сборки inline (главным образом по первичным причинам).
В этой логике также рассматривается различие между клавишами .snk
и .pfx
(которые защищены паролем и секретируются в контейнер ключей). В зависимости от формы, тогда в каталоге Runtime в Microsoft.Common.targets
разрешено свойство KeyContainerName
или KeyOriginatorFile
- Поиск ResolveKeySource
.
Если причина, по которой вам нужно сделать SN
, - это то, что вы только что перезаписали сборку, тот же шаблон обычно должен содержать, т.е. Mono.Cecil
и инструменты a la 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 для этого: (
FYI, само время выполнения не будет находиться под C:\Program Files\Microsoft.NET
- все его файлы будут жить [только] в C:\Windows\Microsoft.NET\vXXXXXX\
Для 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 ИНФОРМАЦИЯ: Не удалось найти файлы для данного шаблона (-ов).
Просто:
В 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
если он защищен паролем, то он захочет записать его