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


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

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>

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


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.


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.


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


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();
}
}

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)

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.