2016-06-17 4 views
0

Я добавил приложение в скрипты и добавил ссылки на сборки, которые имеют версию v2.0.50727. Таким образом, при запуске файла скриптов он возвращается, поскольку сборка смешанного режима построена против версии «v2.0.50727» среды выполнения и не может быть загружена в 4.0 runtime.Setting attribute useLegacyV2RuntimeActivationPolicy = «true» в app.config может решить проблему в asp .net. но в скриптах он не работает. Дальнейший поиск показывает, что выше атрибута useLegacyV2RuntimeActivationPolicy = "true" следует добавить как scriptcs.exe.config. У меня есть файл приложения с именем FMUpgrade.csx и как мы можем ссылаться на этот файл scriptcs.exe.config в файле FMUpgrade.csx.scriptcs docs ничего не говорит о файле scriptcs.exe.config. Также добавлен файл program.exe.config с приложением .config, но все равно не удачный.scriptcs Ошибка сборки смешанного режима

ответ

0

После долгих исследований я получил обходное решение вышеупомянутой проблемы. Используя класс ExeConfigurationFileMap, мы смогли получить значения ключей из app.config, не имея возможности обойти поддерживаемую ошибку времени выполнения, вызванную ошибкой сборки смешанного режима. Сервер server = новый сервер (новый ServerConnection (con)); server.ConnectionContext.ExecuteNonQuery (сценарий); Ошибка возникает при выполнении инструкции ExecuteNonQuery. Так что перед выполнением инструкции

если (RuntimePolicyHelper.LegacyV2RuntimeEnabledSuccessfully) server.ConnectionContext.ExecuteNonQuery (сценарий);

Решение находится ниже с использованием System.Runtime.CompilerServices; с использованием System.Runtime.InteropServices; Публичный статический класс RuntimePolicyHelper { Публичный статический bool LegacyV2RuntimeEnabledSuccessfully {get; частный набор; }

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(); 
    } 
} using System.Runtime.CompilerServices; 

using System.Runtime.InteropServices; public static class RuntimePolicyHelper { public static bool LegacyV2RuntimeEnabledSuccessfully {get; частный набор; }

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(); 
    } 
} 
Смежные вопросы