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


163

मुझे निम्न अपवाद मिल रहे हैं:

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

जैसा कि मैं अपने WPF कार्यक्रम से क्रिस्टल रिपोर्ट निर्यात करने की कोशिश कर रहा था ...

मैंने पहले ही app.config में निम्नलिखित जोड़ दिया है ...

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
<runtime>
  <NetFx40_LegacySecurityPolicy enabled="true"/>
</runtime>

कोई भी विशेषज्ञ मदद कर सकता है ????

संदर्भ मुझे मिला: http://www.davidmoore.info/2010/12/17/running-net-2-runtime-applications-under-the-net-4-runtime


1
महत्वपूर्ण: त्रुटि के रूप में साथ त्रुटि कॉलम "फ़ाइल" यदि ऐसा होता है 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

1
ध्यान रखें कि आपके पास न केवल "C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 Tools \" हो सकता है, लेकिन इसके तहत, एक 'x64' निर्देशिका जिसमें sgen भी है। exe, और संभवतः कई अलग-अलग रास्तों में sgen के कई अन्य प्रतियां / संस्करण, आपके द्वारा स्थापित वीएस के कितने और किन संस्करणों के आधार पर।
मिकीफैगैन_बाहरExitOfSO

@ToolmakerSteve कृपया अपनी टिप्पणी एक उत्तर के रूप में पोस्ट करें ताकि मैं इसे बढ़ा सकूं; अन्य किसी भी उत्तर ने मेरी मदद नहीं की।
मैल्कम

जवाबों:


238

कॉन्फ़िगरेशन नोड के तहत अपने ऐप में इस सटीक स्टार्टअप टैग का उपयोग करने का प्रयास करें

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

2
वास्तव में आपको मुश्किल लाइनों को YourApp में जोड़ना चाहिए। ** exe **। config।
एंटोनके

24
वह app.config है। कंपाइलर इसका नाम बदलने पर निर्माण करेगा।
जेफ

65
एकमात्र भाग जो आवश्यक है, वह हैLegacyV2RuntimeActivationPolicy = "true" का उपयोग। आप अपना वर्तमान ढांचा संस्करण छोड़ सकते हैं।
बेन ग्रिपका

3
मैं दोहरा सकता हूं जब बेन कहता है, मैंने अतिरिक्त आवश्यक रनटाइम को छोड़ दिया और मेरी समस्या दूर हो गई।
माइक माल्टर

1
इस लिंक से आपको यह समझने में भी मदद मिलेगी कि समस्या क्या है, और समाधान आपके लिए क्या कर रहा है: msdn.microsoft.com/en-us/magazine/ee819091.aspx
Mouhammed Soueidane

85

अपवाद स्पष्ट रूप से कुछ .NET 2.0.50727 घटक को पहचानता है। .NET 4.0 में शामिल किया गया था। App.config फ़ाइल में इसका उपयोग करें:

<startup useLegacyV2RuntimeActivationPolicy="true" /> 

इसने मेरी समस्या हल कर दी


इसके लिए एक समापन स्लैश की आवश्यकता है<startup useLegacyV2RuntimeActivationPolicy="true" />
जोन

8

कृपया अपने एप्लिकेशन app.config फ़ाइल में विशेषता useLegacyV2RuntimeActivationPolicy = "true" जोड़ें।

पुराना मूल्य

  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1"/>
  </startup>

नया मूल्य

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

यह आपकी समस्या का समाधान करेगा।


यह जानकर अच्छा लगा कि इसने आपके लिए काम किया। आपके कमेंट के लिए धन्यवाद !
बृजेश कुमार त्रिपाठी

4

मैं वास्तव में उलटा समाधान के साथ यह समान मुद्दा था । मैंने एक .NET प्रोजेक्ट को .NET 4.0 में अपग्रेड किया है और फिर वापस .NET 3.5 में वापस कर दिया है। मेरी परियोजना में app.config निम्नलिखित जारी रखा है जो प्रश्न में उपरोक्त त्रुटि पैदा कर रहा था:

<startup>
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>

इस के लिए त्रुटि को हल करने के लिए समाधान वापस करने के लिए यह उचित 2.0 संदर्भ के लिए निम्नानुसार था:

<startup>
  <supportedRuntime version="v2.0.50727"/>
</startup>

इसलिए यदि कोई डाउनग्रेड उपरोक्त त्रुटि उत्पन्न कर रहा है, तो आपको .NET फ्रेमवर्क समर्थित संस्करण का बैकअप लेना पड़ सकता है।


1

मेरे लिए यह तब फेंक दिया गया जब यूनिट परीक्षण MSTest(VS2015) के तहत चल रहा था । जोड़ना था

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

में

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

VS2015 में मिश्रित-मोड असेंबली MSTest असफलता


1

App.config से विरासत को सक्षम करने से मेरे लिए काम नहीं किया। अज्ञात कारणों से, मेरा एप्लिकेशन V2 रनटाइम नीति को सक्रिय नहीं कर रहा था। मुझे यहां चारों ओर एक काम मिला ।

App.config से विरासत को सक्षम करना एक अनुशंसित दृष्टिकोण है लेकिन कुछ मामलों में यह अपेक्षा के अनुरूप काम नहीं करता है। लिगेसी V2 नीति को लागू करने के लिए अपने मुख्य आवेदन के साथ निम्नलिखित कोड का उपयोग करें:

public static class RuntimePolicyHelper
{
public static bool LegacyV2RuntimeEnabledSuccessfully { get; private set; }

static RuntimePolicyHelper()
{
    ICLRRuntimeInfo clrRuntimeInfo =
        (ICLRRuntimeInfo)RuntimeEnvironment.GetRuntimeInterfaceAsObject(
            Guid.Empty, 
            typeof(ICLRRuntimeInfo).GUID);
    try
    {
        clrRuntimeInfo.BindAsLegacyV2Runtime();
        LegacyV2RuntimeEnabledSuccessfully = true;
    }
    catch (COMException)
    {
        // This occurs with an HRESULT meaning 
        // "A different runtime was already bound to the legacy CLR version 2 activation policy."
        LegacyV2RuntimeEnabledSuccessfully = false;
    }
}

[ComImport]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("BD39D1D2-BA2F-486A-89B0-B4B0CB466891")]
private interface ICLRRuntimeInfo
{
    void xGetVersionString();
    void xGetRuntimeDirectory();
    void xIsLoaded();
    void xIsLoadable();
    void xLoadErrorString();
    void xLoadLibrary();
    void xGetProcAddress();
    void xGetInterface();
    void xSetDefaultStartupFlags();
    void xGetDefaultStartupFlags();

    [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
    void BindAsLegacyV2Runtime();
}
}

1

एक और कॉन्फिग फ़ाइल (आपके प्रोजेक्ट से एक नहीं) और RESTART विज़ुअल स्टूडियो का उपयोग करने का प्रयास करें:

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.executionengine.x86.exe.config
(32-bit)

या

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.executionengine.exe.config
(64-bit)

मैं इस पर विस्तार करूंगा, क्योंकि मूल निवासी .configजो एक आवेदन में रहता है और आम तौर पर अतिरिक्त एप्लिकेशन कॉन्फ़िगरेशन के लिए आवश्यक है को दरकिनार करना एक अच्छा समाधान नहीं होगा।
18 अक्टूबर को

3
इकाई परीक्षणों के लिए, विन्यास परिवर्तन vstest.executionengine.x86.exe.config फ़ाइल में होना चाहिए क्योंकि यह निष्पादन योग्य उस कोड की मूल प्रक्रिया है जिसका आप परीक्षण कर रहे हैं। यह समस्या विज़ुअल स्टूडियो 2012 SP4 में निश्चित रूप से तय की गई थी, लेकिन यह अभी भी मेरी मशीन पर मौजूद है।
ब्रैंडन एस

(ध्यान दें कि परिवर्तनों को प्रभावी करने के लिए आपको Visual Studio को पुनः आरंभ नहीं करना चाहिए। आपको बस vstest पर कार्य समाप्त करने की आवश्यकता होनी चाहिए। * प्रक्रियाएं क्योंकि वे आपके इकाई परीक्षण पूरा होने के बाद भी हैंग हो जाते हैं।)
ब्रैंडन एस

इसे आगे बढ़ाते हुए यह मुझे उस वास्तविक स्थान पर ले जाता है जहाँ मुझे इसे बदलना था।
Janis S.

1

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

स्रोत: SGEN मिश्रित मोड विधानसभा

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