Zestaw w trybie mieszanym jest oparty na wersji „v2.0.50727” środowiska wykonawczego

163

Otrzymuję następujący wyjątek:

Zestaw w trybie mieszanym jest oparty na wersji „v2.0.50727” środowiska wykonawczego i nie można go załadować do środowiska wykonawczego 4.0 bez dodatkowych informacji o konfiguracji.

ponieważ próbowałem wyeksportować raport kryształu z mojego programu WPF ...

Dodałem już w pliku app.config ...

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

Każdy ekspert może pomóc ????

Odniesienie, które znalazłem: http://www.davidmoore.info/2010/12/17/running-net-2-runtime-applications-under-the-net-4-runtime

Christina Wong
źródło
1
WAŻNE: Jeśli błąd występuje z kolumną błędu „Plik” jako SGEN, to poprawka musi znajdować się w pliku sgen.exe.configobok sgen.exe. Na przykład dla VS 2015 utwórz C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\sgen.exe.config. Źródło: SGEN Montaż w trybie mieszanym Minimalna zawartość pliku:<configuration><startup useLegacyV2RuntimeActivationPolicy="true"/></configuration>
ToolmakerSteve
1
Pamiętaj, że możesz mieć nie tylko „C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 Tools \”, ale pod tym katalogiem „x64”, który ma również plik sgen. exe i prawdopodobnie kilka innych kopii / wersji sgen w różnych ścieżkach, w zależności od tego, ile i jakie wersje VS zainstalowałeś.
MickeyfAgain_BeforeExitOfSO
@ToolmakerSteve Proszę zamieścić swój komentarz jako odpowiedź, abym mógł go zagłosować; żadna z pozostałych odpowiedzi mi nie pomogła.
Malcolm
@Malcolm - OK, wysłane jako odpowiedź
ToolmakerSteve

Odpowiedzi:

238

Spróbuj użyć tego dokładnego tagu startowego w pliku app.config w węźle konfiguracji

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    <requiredRuntime version="v4.0.20506" />
  </startup>
Talha
źródło
2
Właściwie powinieneś dodać skomplikowane linie do YourApp. ** exe **. Config.
AntonK,
24
To jest app.config. Kompilator zmieni jego nazwę podczas kompilacji.
Jeff
65
Jedyną wymaganą częścią jest useLegacyV2RuntimeActivationPolicy = "true". Możesz zostawić aktualną wersję frameworka.
Ben Gripka
3
Mogę podwoić, gdy Ben mówi, że pominąłem dodatkowy wymagany czas działania i mój problem zniknął.
Mike Malter
1
Ten link powinien również pomóc ci zrozumieć, na czym polega problem i jakie rozwiązanie robi dla Ciebie: msdn.microsoft.com/en-us/magazine/ee819091.aspx
Mouhammed Soueidane
85

Wyjątek wyraźnie wskazuje, że jakiś składnik .NET 2.0.50727 został uwzględniony w .NET 4.0. W pliku App.config użyj tego:

<startup useLegacyV2RuntimeActivationPolicy="true" /> 

To rozwiązało mój problem

Bibaswann Bandyopadhyay
źródło
To wymaga końcowego ukośnika<startup useLegacyV2RuntimeActivationPolicy="true" />
Jonn
8

Dodaj atrybut useLegacyV2RuntimeActivationPolicy = "true" w pliku app.config aplikacji.

Stara wartość

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

Nowa wartość

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

To rozwiąże twój problem.

Brijesh Kumar Tripathi
źródło
Miło wiedzieć, że to zadziałało. Dzięki za komentarz !
Brijesh Kumar Tripathi
4

W rzeczywistości miałem ten sam problem z rozwiązaniem odwrotnym . Zaktualizowałem projekt .NET do .NET 4.0, a następnie wróciłem do .NET 3.5. Plik app.config w moim projekcie nadal zawierał następujące elementy, które powodowały powyższy błąd:

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

Rozwiązaniem tego błędu było przywrócenie odpowiedniego odniesienia 2.0 w następujący sposób:

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

Jeśli więc obniżenie wersji powoduje powyższy błąd, może być konieczne utworzenie kopii zapasowej obsługiwanej wersji .NET Framework.

atconway
źródło
1

U mnie to było rzucane podczas uruchamiania testów jednostkowych pod MSTest(VS2015). Musiałem dodać

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

w

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

Błąd montażu MSTest w trybie mieszanym w VS2015

Janis S.
źródło
1

Włączenie starszej wersji z app.config nie działa dla mnie. Z nieznanych powodów moja aplikacja nie aktywowała zasad środowiska wykonawczego V2. Znalazłem pracę wokół tutaj .

Włączenie starszej wersji z app.config jest zalecanym podejściem, ale w niektórych przypadkach nie działa zgodnie z oczekiwaniami. Użyj następującego kodu w aplikacji głównej, aby wymusić zasady Legacy 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();
}
}
Talha Imam
źródło
1

Spróbuj użyć innego pliku konfiguracyjnego (nie tego z Twojego projektu) i RESTART Visual Studio:

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

lub

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.executionengine.exe.config
(64-bit)
Alexander Tytarchuk
źródło
Rozwinąłbym to, ponieważ omijanie natywnego, .configktóry znajduje się w aplikacji i zwykle jest potrzebny do dodatkowych konfiguracji aplikacji, nie byłoby dobrym rozwiązaniem.
atconway,
3
W przypadku testów jednostkowych zmiana konfiguracji musi nastąpić w pliku vstest.executionengine.x86.exe.config, ponieważ ten plik wykonywalny jest procesem nadrzędnym testowanego kodu. Ten problem został rzekomo rozwiązany w dodatku SP4 dla programu Visual Studio 2012, ale nadal występuje na moim komputerze.
Brandon S,
(Zauważ, że nie powinieneś ponownie uruchamiać programu Visual Studio, aby zmiany odniosły skutek. Powinieneś po prostu zakończyć zadanie w procesach vstest. *, Ponieważ te zawieszają się nawet po zakończeniu testów jednostkowych.)
Brandon S
Uwalniając to, ponieważ doprowadziło mnie to do faktycznego miejsca, w którym musiałem to zmienić.
Janis S.
1

Jeśli błąd występuje z kolumną błędu „Plik” jako SGEN, to poprawka musi znajdować się w pliku sgen.exe.configobok sgen.exe. Na przykład dla VS 2015 utwórz C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\sgen.exe.config. Minimalna zawartość pliku:<configuration><startup useLegacyV2RuntimeActivationPolicy="true"/></configuration>

Źródło: zespół SGEN w trybie mieszanym

ToolmakerSteve
źródło