لا يمكن العثور على sn.exe للتوقيع على التجميع
سؤال
نظرت إلى C:\Program Files\Microsoft.NET
ولا يمكنني رؤية أي SN.exe
ملف.
لدي .NET 3.5 Runtime مثبتة ؛ أليس هذا كافيا؟
المحلول
تحتاج إلى تثبيت Windows SDK 6.0A ، وليس فقط وقت التشغيل.
إذا قمت بتثبيت VS2008 ، فستجد أنه مثبت بالفعل ، وسيكون Sn.exe هنا:
C: Program Files Microsoft SDKS 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 و Accepted A ولا أتجاهل جدارةهم بأي شكل من الأشكال ، يرجى تجاهل ذلك إذا لم ينطبق في قضيتك)
لاحظ أن SN.exe
نادراً ما تكون هناك حاجة إليها في الممارسة العملية - الأسلاك في Microft.<lang>.targets
التي تدفع المجمعين [و AL.exe
إلخ] كل [فعال] خذ SignAssembly
العلم في ملف .proj في الاعتبار ويمرر بشكل مشروط في مفتاح المترجم (المترجمين) وما إلى ذلك. حتى يتمكن من القيام بكل العمل في لمسة واحدة من التجميع المضمّن (بشكل رئيسي لأسباب perf).
يتناول هذا المنطق أيضًا التمييز بين .snk
و .pfx
المفاتيح (التي يتم حمايتها كلمة المرور ويتم إفرازها في حاوية رئيسية). اعتمادًا على النموذج ، هناك إما KeyContainerName
أو KeyOriginatorFile
خاصية حلها Microsoft.Common.targets
في دليل وقت التشغيل - ابحث عن ResolveKeySource
.
إذا كان السبب الذي يجعلك بحاجة إلى القيام SN
نظرًا لأنك أعادت كتابة التجميع للتو ، يجب أن يكون نفس النمط عمومًا ، أي Mono.Cecil
والأدوات التي لا يمكن عملها بشكل عام (أفترض ، لم يتم تأكيدها) ، وتتخذ أيضًا نفس الحجج و/أو يمكن إجراؤها للقيام بالتوقيع.
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 "$(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 X.X.X Tools\
.
كلا ، يبدو أنك بحاجة إلى SDK لذلك :(
لمعلوماتك ، لن يكون وقت التشغيل نفسه تحت 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 أدوات x64 sn.exe
ما زلت الآن غير قادر على استخدام موجه VS. إنها تظهر لي رسالة مثل
** Visual Studio 2017 Developer Outder موجه V15.8.9
vcvarsall.bat] بيئة تهيئة ل: "x64"
C: Program Files (x86) Microsoft Visual Studio 2017 Community> حيث Sn.exe معلومات: لم تستطع العثور على ملفات للنمط (s) المعطى.
ببساطة:
في Windows (وفقًا للنسخة الإطار .NET 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
إذا كانت كلمة مرور محمية أكثر مما تريد أن تدوينها ذي الأشخاص ذوي الإعاقة