Сборка в смешанном режиме строится против версии v2.0.50727 среды выполнения.
Я получаю следующее исключение:
Сборка в смешанном режиме выполняется на основе версии v2.0.50727 среды выполнения и не может быть загружена в среде выполнения 4.0 без дополнительной информации о конфигурации.
как я пытался экспортировать отчет Crystal из моей программы 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
7 ответов
Попробуйте использовать этот точный тег запуска в вашем app.config под узлом конфигурации
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
<requiredRuntime version="v4.0.20506" />
</startup>
Исключение четко указывает на то, что некоторые компоненты.NET 2.0.50727 были включены в.NET 4.0. В файле App.config используйте это:
<startup useLegacyV2RuntimeActivationPolicy="true" />
Это решило мою проблему
Пожалуйста, добавьте атрибут useLegacyV2RuntimeActivationPolicy="true" в ваш файл app.config приложения.
Старая ценность
<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>
Это решит вашу проблему.
У меня фактически была такая же проблема с обратным решением. Я обновил проект.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 Framework.
Если ошибка происходит с ошибкой столбца "Файл" как SGEN, то исправление должно быть в файле sgen.exe.config
, рядом с sgen.exe
, Например, для VS 2015 создайте C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\sgen.exe.config
, Минимальное содержание файла: <configuration><startup useLegacyV2RuntimeActivationPolicy="true"/></configuration>
Источник: SGEN Сборка смешанного режима
Включение наследства из app.config не сработало для меня. По неизвестным причинам мое приложение не активировало политику времени выполнения V2. Я нашел здесь работу.
Рекомендуется использовать наследие из app.config, но в некоторых случаях он работает не так, как ожидалось. Используйте следующий код в вашем главном приложении для принудительного применения политики 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();
}
}
Для меня это было выброшено при запуске юнит-тестов под 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
Попробуйте использовать другой файл конфигурации (не тот, что в вашем проекте) и RESTART Visual Studio:
C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ CommonExtensions \ Microsoft \ TestWindow \ vstest.executionengine.x86.exe.config (32-разрядная версия)
или же
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.executionengine.exe.config (64-разрядная версия)