6

आपूर्ति किए गए हस्ताक्षर एल्गोरिदम के लिए हस्ताक्षर डिस्क्रिप्शन नहीं बनाया जा सका मेरे पास एक वीएस -2010 .NET 4.0 VSTO Outlook Addin प्रोजेक्ट है जिसे मैं VS2012 में माइग्रेट करना चाहता हूं (लेकिन इसे .NET 4.0 में रखें)। यह ठीक संकलित, और आईडीई ठीक अंदर से चलाता है, लेकिन जब मैं प्रकाशित ClickOnce इंस्टॉलर को चलाने के प्रयास में, मैं निम्नलिखित अपवाद:वीएस2012 .NET 4.0 क्लिकऑन्स वीएसटीओ क्रिप्टोग्राफिक अपवाद:

System.Deployment.Application.InvalidDeploymentException: अपवाद फ़ाइल से प्रकट पढ़ने : //MyPath/MyAddIn.vsto: मैनिफेस्ट मान्य नहीं हो सकता है या फ़ाइल खोला नहीं जा सका। ---> सिस्टम। तैनाती। आवेदन। अविश्वसनीय डिप्लोमैंट अपवाद: मैनिफेस्ट एक्सएमएल हस्ताक्षर मान्य नहीं है। ---> सिस्टम.Security.Cryptography.CryptographicException: हस्ताक्षर डिस्क्रिप्शन हस्ताक्षर एल्गोरिदम आपूर्ति के लिए नहीं बनाया जा सका।

मेरी परीक्षण और ऑनलाइन शोध (here और there) के आधार पर, ऐसा लगता है कि सिर्फ VS2012 मेरी मशीन पर स्थापित है (चाहे मैं VS2010 या VS2012 से प्रकाशित) होने ClickOnce संस्थापक बलों को एक SHA1 प्रमाण पत्र की आवश्यकता होती है जब .NET 4.0 का उपयोग कर। मेरा मौजूदा SHA256 प्रमाण पत्र VET2010 ( VS2012 इंस्टॉल किए बिना संकलित करते समय .NET 4.0 के साथ पूरी तरह से ठीक काम करता है)।

  • मैं ग्राहकों को .NET 4.5 में अपग्रेड नहीं कर सकता क्योंकि यह एक VSTO40 प्रोजेक्ट है (XP/Office 2007 पर चलता है)।
  • मैं स्थानीय मशीन पर वीएस2012/.NET 4.5 को अनइंस्टॉल नहीं कर सकता क्योंकि मेरे पास अन्य परियोजनाएं हैं जिनकी आवश्यकता है।
  • मैं आसानी से SHA256 से SHA1 तक अपना प्रमाणपत्र डाउनग्रेड नहीं कर सकता।

क्या मुझे आगे बढ़ने की अनुमति देने के लिए कोई अन्य सुझाव हैं?

उत्तर

2

मैंने एक नया प्रमाणपत्र बनाकर अपनी समस्या हल की जिसका उपयोग क्लिकऑनेंस मैनिफेस्ट पर हस्ताक्षर करने के लिए किया गया था और इसे SHA1 एल्गोरिदम का उपयोग करके उत्पन्न किया गया था। http://social.msdn.microsoft.com/Forums/en-US/winformssetup/thread/eba424ae-f7b7-4530-bb68-db3b9972a31e

संपादित करें 2014-Aug-05:
विजुअल स्टूडियो 2013 अद्यतन 3 अंत में इससे समस्या हल हो आप यहाँ वार्तालाप देख सकते हैं।
http://support.microsoft.com/kb/2933779
हल की गई समस्याएं से -> सामान्य:

तुम भी अनुप्रयोगों कि .नेट फ्रेमवर्क 4.0 या किसी पिछले संस्करण को लक्ष्य के लिए SHA 256 कोड हस्ताक्षर प्रमाणपत्र का उपयोग कर सकते हैं। इस अद्यतन से पहले, .NET Framework 4.5 को क्लाइंट कंप्यूटर पर मौजूद होना था जब SHA 256 कोड-हस्ताक्षर प्रमाणपत्र डेस्कटॉप के लिए क्लिकऑन या विजुअल स्टूडियो टूल्स के साथ प्रकाशित अनुप्रयोगों के लिए कार्यालय ऐड-इन्स के लिए उपयोग किया गया था।आप में पिछले SHA 256 कोड हस्ताक्षर प्रमाण पत्र का इस्तेमाल किया है, और इस तरह के रूप में त्रुटियों को देखा है, तो "आवेदन को अनुचित तरीके से स्वरूपित है," "प्रकट मान्य नहीं हो सकता है," "मेनीफ़ेस्ट XML हस्ताक्षर मान्य नहीं है," या " हस्ताक्षर एल्गोरिदम आपूर्ति के लिए हस्ताक्षर डिस्क्रिप्शन नहीं बनाया जा सका," यह अद्यतन पुन: प्रकाशित और नव-प्रकाशित अनुप्रयोगों के लिए समस्या का समाधान करता है।

1
Visual Studio 2012 RTM के साथ भी यही

। जब मैं एक स्वच्छ विंडोज 7 परम मशीन में एप्लिकेशन को तैनात करता हूं तो मेरे पास "हस्ताक्षर एल्गोरिदम आपूर्ति के लिए हस्ताक्षर डिस्क्रिप्शन नहीं बनाया जा सकता" अपवाद। तैनाती मशीन पर नेट फ्रेमवर्क 4.5 की स्थापना के बाद समस्या हल हो गई।

+0

दिलचस्प, तुम कह रहे हो कि तुम जबकि मैं .NET 4.5 "की स्थापना रद्द करें" पड़ा .NET 4.5 "इंस्टॉल करें" के लिए था। –

+1

हां, मुझे तैनाती (ग्राहक) मशीन में .NET 4.5 स्थापित करना पड़ा। मुझे लगता है कि .NET 4.5 में क्लिकऑन मेनिफेस्ट हस्ताक्षर को सत्यापित करने के लिए अलग-अलग तरीका है। अगर मैं बिना हस्ताक्षर के आवेदन को प्रकाशित करता हूं तो सभी काम तैनाती (ग्राहक) मशीन में .NET 4.5 स्थापना के बिना भी ठीक काम करता है। – ploffredi

+0

ओह, मैं देखता हूं। मैंने सोचा कि आप अपनी बिल्ड मशीन के बारे में बात कर रहे थे। मेरी समस्या ClickOnce आमंत्रण चरण के दौरान हो रही थी। मैं .NET 4.5 के साथ संकलित नहीं कर रहा हूं क्योंकि मेरे उपयोगकर्ता अभी भी विंडोज एक्सपी का उपयोग कर रहे हैं। लेकिन वे साल के अंत तक मशीन अपग्रेड के कारण हैं। :) –

9

मैं इस में ठीक उसी त्रुटि संदेश था और वी.एस. 2013 .NET 4.5 का उपयोग कर, और SHA256 साथ सही ढंग से सब कुछ पर हस्ताक्षर किया गया था।

अंत में, मैंने पाया कि VSTO 2010 रनटाइम के एक पुराने संस्करण स्थापित किया गया था (10.0.40303)। एक बार जब हम इसे 10.0.40820 पर अपडेट कर लेते हैं तो सब कुछ ठीक काम करता है। वास्तव में उम्मीद है कि यह किसी की मदद करता है, मुझे यह पता लगाने की कोशिश कर रहे दिनों के लिए बिल्कुल बोनर चला गया कि क्या हो रहा था।

+0

अच्छा खोज! मेरे पास पुराना संस्करण स्थापित है (और मेरे सभी ग्राहकों को तैनात किया गया है)। मुझे मिलने का अगला मौका, मैं SHA256 प्रमाण पत्र पर वापस लौटने की कोशिश करूंगा और नए वीएसटीओ रनटाइम का उपयोग करूँगा और देख सकता हूं कि यह काम करता है या नहीं। धन्यवाद! –

+2

नोट: वीएसटीओ रनटाइम का एक नया संस्करण आज जारी किया गया है, यह एक "अज्ञात प्रकाशक" मुद्दा हल करता है जिसे आप अन्यथा अपने SHA256 प्रमाण के साथ देख सकते हैं। http://blogs.msdn.com/b/vsto/archive/2014/04/10/vsto-runtime-update-to-address-slow-shutdown-and-unknown-publisher-for-sha256-certificates.aspx –

+0

धन्यवाद माइकल, यह एक दिन से अधिक के लिए लड़ने के बाद मुझे बाहर निकाल दिया। –

0

मैं एक VSTO परियोजना के साथ इस में भाग, विजुअल स्टूडियो 2015 के साथ प्रकाशित करने नेट 4.5 को लक्षित, और नेट 4.5 के साथ एक ग्राहक मशीन पर चल रहा है। सैद्धांतिक रूप से मुझे त्रुटि दिखाई नहीं देनी चाहिए, लेकिन मैंने पाया कि एप्लिकेशन मैनिफेस्ट (* .dll.manifest) अभी भी .NET 4.0 निर्दिष्ट कर रहा था। यह लॉग इन करने के बाद चलाने वाली पहली टाई सही ढंग से काम करेगा, लेकिन इसके बाद हर बार विफल हो जाएगा।

<dependency> 
    <dependentAssembly dependencyType="preRequisite" allowDelayedBinding="true"> 
    <assemblyIdentity name="Microsoft.Windows.CommonLanguageRuntime" version="4.0.30319.0" /> 
    </dependentAssembly> 
</dependency> 

संस्करण नेट 4.5 के लिए 4.0.30319.18020 है जहाँ तक मैं बता सकता हूँ, इसलिए मैं उस में के बजाय डाल दिया।

<dependency> 
    <dependentAssembly dependencyType="preRequisite" allowDelayedBinding="true"> 
    <assemblyIdentity name="Microsoft.Windows.CommonLanguageRuntime" version="4.0.30319.18020" /> 
    </dependentAssembly> 
</dependency> 

तब मुझे एप्लिकेशन और परिनियोजन प्रकट (* .vsto) पर फिर से हस्ताक्षर करना पड़ा। Signing and re-signing manifests in ClickOnce देखें। यहां एक पावरशेल स्क्रिप्ट है जो मैं करता था। यह Application Files\<application>_<version>\ फ़ोल्डर से बाहर चलाता है।

# get files only, no directories 
$withDeploy = ls -Recurse | where Mode -eq "------" | where Name -Like "*.deploy" 

if ($withDeploy.Length -gt 0) 
{ 
    # rename .deploy files 
    $withDeploy | %{ Rename-Item -Path $_.FullName -NewName $_.FullName.Replace(".deploy", "") } 

    $certPath = "Z:\path\to\your\cert\file" 
    $certFile = "$certPath\cert.p12" 
    $certPass = "<your_password>" 

    # re-sign the application manifest; should be <application>*.dll.manifest 
    $manifestFile = ls | where Name -like "*.dll.manifest" | %{ return $_.Name } 
    mage -Update $manifestFile -CertFile $certFile -Password $certPass 

    # re-sign the deployment manifest; *.vsto 
    $vstoFile = ls | where Name -like "*.vsto" | %{ return $_.FullName } 
    #mage -Update $vstoFile -AppManifest $manifestFile -CertFile $certFile -Password $certPass 

    $otherVstoFile = ls "..\..\" | where Name -like "*.vsto" | %{ return $_.FullName } 
    mage -Update $otherVstoFile -AppManifest $manifestFile -CertFile $certFile -Password $certPass 
    Copy-Item $otherVstoFile $vstoFile 

    # put .deploy back 
    $withDeploy | %{ Rename-Item -Path $_.FullName.Replace(".deploy", "") -NewName $_.FullName } 
} 

आदर्श रूप में यह दृश्य स्टूडियो परियोजना में कोई परिवर्तन करने के लिए बेहतर तो यह है कि मैं इस हर बार जब मैं प्रकाशित करने के लिए की जरूरत नहीं है हो सकता है, लेकिन मुझे लगता है कि इसके लिए कोई तरीका नहीं दिख रहा है, और किसी भी समाधान कोई समाधान से बेहतर है। मैं इसे बाद में प्रकाशित एमएसबिल्ड एक्शन या कुछ के रूप में जोड़ सकता हूं, लेकिन अभी यह काम करता है।