.NET 4.0 प्रोजेक्ट में .NET 2.0 मिश्रित मोड असेंबली को संदर्भित करने के लिए 'अतिरिक्त कॉन्फ़िगरेशन' क्या आवश्यक है?


525

मेरे पास एक परियोजना है जिसमें मैं .NET 4.0 सुविधाओं में से कुछ का उपयोग करना चाहता हूं, लेकिन एक मुख्य आवश्यकता यह है कि मैं System.Data.SQLite ढांचे का उपयोग कर सकता हूं जो 2.X के खिलाफ संकलित है। मैं इसका उल्लेख संभव होने के रूप में देखता हूं जैसे कि यहां स्वीकृत उत्तर है लेकिन मैं यह नहीं देखता कि वास्तव में इसे कैसे प्राप्त किया जाए।

जब मैं सिर्फ कोशिश करता हूं और अपने 4.0 प्रोजेक्ट को चलाता हूं, जबकि मुझे 2.X विधानसभा मिलती है:

मिश्रित मोड असेंबली रनटाइम के संस्करण 'v2.0.50727' के खिलाफ बनाया गया है और अतिरिक्त कॉन्फ़िगरेशन जानकारी के बिना 4.0 रनटाइम में लोड नहीं किया जा सकता है।

"अतिरिक्त कॉन्फ़िगरेशन" क्या आवश्यक है?


3
इसे भी देखें: stackoverflow.com/questions/1604663/…
मिखाइल

कोशिश करो ! http://social.msdn.microsoft.com/Forums/en/clr/thread/58271e39-beca-49ac-90f9-e116fa3dd3c0 धन्यवाद। मज़े करो।

महत्वपूर्ण: त्रुटि के रूप में साथ त्रुटि कॉलम "फ़ाइल" यदि ऐसा होता है SGEN, तो ठीक जरूरतों एक फ़ाइल में होना sgen.exe.config, के बगल में sgen.exe। उदाहरण के लिए, वीएस 2015 के लिए, बनाएं C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\sgen.exe.config। स्रोत: SGEN मिक्स्ड मोड असेंबली न्यूनतम फ़ाइल सामग्री:<configuration><startup useLegacyV2RuntimeActivationPolicy="true"/></configuration>
ToolmakerSteve

जवाबों:


685

CLR 2.0 मिश्रित मोड असेंबली का उपयोग करने के लिए , आपको शामिल करने के लिए अपनी App.Config फ़ाइल को संशोधित करना होगा:

<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>

कुंजी useLegacyV2RuntimeActivationPolicyध्वज है। यह CLR आपके मिश्रित मोड असेंबली को लोड करने के लिए नवीनतम संस्करण (4.0) का उपयोग करने का कारण बनता है। इसके बिना, यह काम नहीं करेगा।

ध्यान दें कि यह केवल मिश्रित मोड (C ++ / CLI) असेंबली के लिए मायने रखता है। आप इसमें निर्दिष्ट किए बिना सभी प्रबंधित CLR 2 असेंबली लोड कर सकते हैं app.config


@ मैंने आपके सुझाव की कोशिश की है, लेकिन अपवाद अभी भी है। मैंने ऐप को डबल-चेक किया है ।config जो मेरे EXE फ़ोल्डर में कॉपी हो जाता है और यह अभी भी काम नहीं करता है। यह log4net का उपयोग करते समय आता है। मुझे इस त्रुटि के बारे में कुछ भी पता नहीं चल सकता है: log4net को छोड़कर यहां: stackoverflow.com/questions/1866735/log4net-and-net-4-0 , लेकिन यह बहुत कुछ नहीं कहता है। किसी भी विचार पर कि मैं अपने विशेष मुद्दे के बारे में अधिक जानकारी कैसे प्राप्त कर सकता हूं?
डेव

@Dave: यह सुझाव दे रहा है कि आप बस log4net के .NET 4 देशी संस्करण का उपयोग कर सकते हैं - जो सबसे अच्छा विकल्प लगता है। यदि .NET 4 संस्करण है, तो इसका उपयोग करें ...
रीड कोपसे

@Reed एक नहीं है, और मैंने वास्तव में उस उत्तर की व्याख्या की है जिसका अर्थ है कि आपको खुद log4net को संकलित करना होगा। मुझे लगता है कि मैं ऐसा कर सकता हूं, लेकिन मैं सिर्फ उनके पहले से तैयार किए गए बाइनरी को ले जाऊंगा और इसे अपनी परियोजना से संदर्भित करूंगा। मैं इसे कुछ और देखूंगा। लेकिन क्या आप सोच सकते हैं कि app.config बदलने से काम क्यों नहीं चलता? मुझे लगा कि शायद मुझे programname.exe.config का उपयोग करना था, लेकिन मैंने भी कोशिश की और यह काम नहीं किया। मेरे सीमित अनुभव में, या तो फ़ाइल नाम ही काम करता है।
डेव

19
NUnit की कॉन्फिग फ़ाइल में इस लाइन को डालने में मुझे क्या मदद मिली : <स्टार्टअप यूज़लिग वीवी 2 रनटाइम एक्टेशनपॉलिसी = "सही"> <supportRuntime वर्जन = "v4.0" /> <आवश्यक रूटीन वर्जन = "v4.0.20506" /> </ स्टार्टअप>
फिलिप ज़वाडा

76
Microsoft को अपवाद संवाद में एक बटन बनाना चाहिए: "
स्टैकओवरफ़्लो

35

यह फोरम .NET फ्रेमवर्क डेवलपर सेंटर पर पोस्ट करता है। यह कुछ अंतर्दृष्टि प्रदान कर सकता है।

(एप्लिकेशन की कॉन्फ़िग फ़ाइल में जोड़ें।)

<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>

2
एनएटीई बिल्ड के लिए इस ऐप को कैसे कॉन्फ़िगर किया जाना चाहिए?
सागर

14

आपके द्वारा लक्षित रूपरेखा के किस संस्करण के आधार पर, आप सही स्ट्रिंग प्राप्त करने के लिए यहां देखना चाहते हैं:

http://msdn.microsoft.com/en-us/library/ee517334.aspx

मैं घंटों बर्बाद करने की कोशिश कर रहा हूं कि मेरी रिलीज को लक्षित क्यों किया गया है। नेट 4.0 क्लाइंट को पूर्ण संस्करण की आवश्यकता है। मैंने अंत में इसका इस्तेमाल किया:

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0.30319" 
               sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>

11

एक बार जब आप app.config फ़ाइल सेट करते हैं , दृश्य स्टूडियो App.exe.config नामक बिन फ़ोल्डर में एक प्रति उत्पन्न करेगा । तैनाती के दौरान आवेदन निर्देशिका में इसे कॉपी करें। स्पष्ट लगता है, लेकिन आश्चर्यजनक रूप से बहुत से लोग इस कदम को याद करते हैं। WinForms डेवलपर्स का उपयोग फ़ाइलों को कॉन्फ़िगर करने के लिए नहीं किया जाता है :)।


दूसरा तरीका यह है कि app.config को हटा दें और फिर Project-> Add-> नई आइटम से एक नया जोड़ें और General-> एप्लिकेशन कॉन्फ़िगरेशन फ़ाइल चुनें (जो ऐप्प -config नामक एक पाठ फ़ाइल बनाने के समान नहीं है)
स्मिर्किंगमैन

8

2.0 और 4.0 असेंबली का एक साथ उपयोग करना काफी सीधा नहीं है।

App.config में समर्थित फ्रेमवर्क घोषणाओं का आदेश वास्तव में मिश्रित मोड के अपवाद पर प्रभाव डालता है। यदि आप घोषणा क्रम को पलटाते हैं तो आपको मिश्रित मोड त्रुटि मिलेगी। यही इस उत्तर का उद्देश्य है।

इसलिए अगर आपको विंडोज फॉर्म ऐप में त्रुटि मिलती है, तो, यह कोशिश करें, ज्यादातर विंडोज फॉर्म ऐप।

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
    <supportedRuntime version="v2.0.50727"></supportedRuntime>
  </startup>

या अगर प्रोजेक्ट विंडोज फॉर्म नहीं है। वेब प्रोजेक्ट में इसे web.config फ़ाइल में जोड़ें।

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    <supportedRuntime version="v2.0.50727"></supportedRuntime>
  </startup>

7

"UseLegacyV2RuntimeActivationPolicy" विशेषता सेट के साथ " स्टार्टअप" तत्व जोड़कर समस्या को हल करने में सक्षम था ।

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    <supportedRuntime version="v2.0.50727"/>
</startup>

लेकिन इसे प्रभावी होने के लिए App.config में कॉन्फ़िगरेशन टैग के पहले बाल तत्व के रूप में रखना था

<?xml version="1.0"?>
  <configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
      <supportedRuntime version="v2.0.50727"/>
    </startup>
  ......
....

1
किसके साथ क्या हुआ version="v2.0"?
सामब

1
बिल्ड नंबर 2.0 के लिए आवश्यक है, लेकिन 4.0 के लिए नहीं, इसलिए शीर्ष संस्करण गलत है। नीचे सही है।
इकिडाइम

5

मेरे लिए ऊपर काम नहीं किया (मैं एक वेब ऐप पर काम कर रहा हूं) - लेकिन यह किया ...

फ़ोल्डर में sgen.exe.config फ़ाइल संपादित करें (मुझे पहले एक बनाना था); C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 टूल (v7.0 फ़ोल्डर में एक भी है, लेकिन मुझे यह बदलने की आवश्यकता नहीं है कि, मैं VS2012 का उपयोग कर रहा हूं)

एक्सएमएल के शंकु को इस तरह दिखना चाहिए (पिछले उत्तरों में समान)

<?xml version ="1.0"?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <requiredRuntime safemode="true" imageVersion="v4.0.30319" version="v4.0.30319"/>
    </startup>
</configuration>

5

यदि आपकी वेब सेवा में काम कर रहे हैं और v2.0 असेंबली एक निर्भरता है जिसे WcfSvcHost.exe द्वारा लोड किया गया है तो आपको इसमें शामिल करना होगा

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" />
</startup>

में .. \ Microsoft दृश्य स्टूडियो 10.0 \ Common7 \ IDE \ WcfSvcHost.exe.config फ़ाइल

इस तरह, दृश्य स्टूडियो रनटाइम पर लोडर के माध्यम से सही जानकारी भेजने में सक्षम होगा।


4

मैं इस मुद्दे में भाग गया जब हम दृश्य स्टूडियो 2015 में बदल गए । उपरोक्त में से किसी भी उत्तर ने हमारे लिए काम नहीं किया। अंत में हमने इसे मशीन पर सभी sgen.exe निष्पादकों के लिए निम्न कॉन्फिगर फ़ाइल जोड़कर काम किया

<?xml version ="1.0"?>
    <configuration>
        <startup useLegacyV2RuntimeActivationPolicy="true">
            <supportedRuntime version="v4.0" />
        </startup>    
</configuration>

विशेष रूप से इस स्थान पर, तब भी जब हम .NET 4.0 को लक्षित कर रहे थे:

C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 उपकरण


क्या आप अधिक विशिष्ट हो सकते हैं? क्या आपका मतलब है कि आपने सभी मौजूदा * .config फाइलों में यह कॉन्फिगर विकल्प जोड़ा है या आपने sgen.exe के लिए .config फाइल बनाई है?
एडम स्पाइसर

मेरे लिए मेरे पास विजुअल स्टूडियो 2015 टेस्ट प्रोजेक्ट्स के साथ यह समस्या थी। इस पोस्ट ने मेरी मदद की। devbraindump.wordpress.com/2015/07/29/hello-world
एडम स्पाइसर

1
@AdamSpicer हमने इसे सभी sgen.exe की सभी .config फ़ाइलों में जोड़ा है। यदि कोई नहीं था, तो हमने एक बनाया।
CMD

3

मैंने इस विन्यास का उपयोग किया है:

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v2.0"/>
    <supportedRuntime version="v4.0"/>
</startup>

मेरे लिए काम किया


3
v2.0.50727 होना चाहिए, v2.0 बिल्ड नंबर के लिए आवश्यक है, लेकिन v4.0 के लिए बिल्ड नंबर की आवश्यकता नहीं है
linquize

1

विजुअल स्टूडियो 2015 में अपग्रेड करते समय मुझे यह समस्या थी और यहां पोस्ट किए गए समाधानों में से किसी ने भी कोई अंतर नहीं किया, हालांकि कॉन्फ़िगरेशन सही है परिवर्तन के लिए स्थान नहीं है। मैंने इस कॉन्फ़िगरेशन को जोड़कर इस समस्या को ठीक किया:

<startup useLegacyV2RuntimeActivationPolicy="true">
</startup>

के लिए: C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ CommonExtensions \ Microsoft \ TestWindow \ TE.ProcessHost.Managed.exe.config

फिर Visual Studio को पुनरारंभ किया।


0

मुझे गुग्लिंग के 3-4 घंटों के बाद इसके चारों ओर एक रास्ता मिला। मैंने निम्नलिखित जोड़ा है

<startup selegacyv2runtimeactivationpolicy="true">
  <supportedruntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>

यदि यह आपकी समस्या का समाधान नहीं करता है तो -> प्रोजेक्ट सन्दर्भ में Right Click on DLLजहाँ आपको त्रुटि हो रही है -> Select Properties-> Check the Run-time Version->> यदि यह है v2.0.50727तो हम समस्या को जानते हैं। समस्या यह है: - आप 2.0 Version of respective DLL. समाधान कर रहे हैं : - आप delete the respective DLLपरियोजना के संदर्भ से और फिर download the latest version of DLL'sसंबंधित वेबसाइट से और नवीनतम संस्करण DLL के संदर्भ को जोड़ सकते हैं तब यह काम करेगा।


1
इसे ठीक कर देंगे क्योंकि आप मान रहे हैं कि DLL का नवीनतम संस्करण .NET के नए संस्करण के विरुद्ध संकलित है?
लुकास

0

मैं इसी त्रुटि का सामना कर रहा था, और हमेशा के लिए अपने समाधान में विभिन्न कॉन्फिग फाइलों में सुझाए गए स्टार्टअप स्टेटमेंट को जोड़ने के लिए खर्च किया, फ्रेम बेमेल को अलग करने का प्रयास किया। कुछ भी काम नहीं किया। मैंने अपने XML स्कीमा में स्टार्टअप जानकारी भी जोड़ी है । यह भी मदद नहीं की। वास्तविक फ़ाइल को देखकर जो समस्या पैदा कर रहा था (जो केवल यह कहेगा कि इसे "स्थानांतरित या हटा दिया गया था") से पता चला कि यह वास्तव में लाइसेंस कंपाइलर (एलसी) था।

लगता है कि अपमानजनक लाइसेंस को हटाने के लिए। फ़ाइल को समस्या को ठीक करने के लिए लगता है।


0

वीएस 2008 से वीएस 2010 तक कुछ कोड माइग्रेट करते समय मुझे इसी तरह के मुद्दे का सामना करना पड़ रहा था। App.config फ़ाइल में परिवर्तन करने से मेरे लिए समस्या हल हो गई।

<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0.30319"
         sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>
</configuration>

0

इस स्थान पर निम्नलिखित जोड़ें: C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX 4.0 उपकरण \ x64 FileName: sgen.exe.config (यदि आपको यह फ़ाइल नहीं मिली, तो बनाएं और एक जोड़ें)

 <?xml version ="1.0"?>

<configuration>
 <runtime>        
        <generatePublisherEvidence enabled="false"/>    
    </runtime>

    <startup useLegacyV2RuntimeActivationPolicy="true">

                <supportedRuntime version="v4.0" />

    </startup>    

</configuration>

ऐसा करने से समस्या हल हो गई


0

मैं उपयोग करता हूं

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
    <supportedRuntime version="v2.0.50727"/>
</startup>

यह काम करता है लेकिन डी </configuration>टैग से ठीक पहले अन्यथा स्टार्टअप टैग ठीक से काम नहीं करता है


-1

इसके अलावा, मेरे पास क्लास लाइब्रेरी के साथ यह मुद्दा था, यदि आपके मुख्य एप्लिकेशन में जोड़े गए क्लास लाइब्रेरी के साथ कोई भी समस्या है। बस जोड़ दो

<startup useLegacyV2RuntimeActivationPolicy="true">

आपको मुख्य आवेदन जो तब कक्षा पुस्तकालय द्वारा उठाया जाएगा।


यह एक अधूरा समाधान है। कॉन्फ़िगरेशन में नाम संवेदनशील होते हैं, और आप एक U.
चक दे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.