لا يمكن العثور على sn.exe للتوقيع على التجميع

StackOverflow https://stackoverflow.com/questions/1535871

  •  20-09-2019
  •  | 
  •  

سؤال

نظرت إلى 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 &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; " />

تم تغيير مسار 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

إذا كانت كلمة مرور محمية أكثر مما تريد أن تدوينها ذي الأشخاص ذوي الإعاقة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top