2016-06-17 16 views
0

私はscriptcsでアプリケーションを追加し、バージョンv2.0.50727のアセンブリへの参照をいくつか追加しました。それで、scriptcsファイルを実行しているときに、混合モードアセンブリがランタイムのバージョン 'v2.0.50727'に対して構築され、4.0 runtime.Setting属性に読み込めません。app.configのuseLegacyV2RuntimeActivationPolicy = "true"は、 .net Webアプリケーション。スクリプトでは動作しません。さらに検索すると上記のattribbute useLegacyV2RuntimeActivationPolicy = "true"をscriptcs.exe.configとして追加する必要があります。私はFMUpgrade.csxという名前のアプリケーションファイルを持っていますが、FMUpgrade.csxファイルでこのscriptcs.exe.configを参照するにはどうすればいいですか?scripts.scriptcs docsはscriptcs.exe.config.Alsoについて多くのことを言っていません。app.exe .configでも成功はまだありません。scriptcs混在モードアセンブリエラー

答えて

0

多くの研究の後、私は上記の問題に対する回避策の解決策を得ました。 クラスExeConfigurationFileMapを使用することで、app.configからキー値を取得できるようになりました。これは、混合モードアセンブリエラーによって発生したサポートされているランタイムエラーをバイパスできません。 サーバーサーバー=新しいサーバー(新しいServerConnection(con)); server.ConnectionContext.ExecuteNonQuery(スクリプト); ExecuteNonQueryステートメントの実行中にエラーが発生しました。 だから、(RuntimePolicyHelper.LegacyV2RuntimeEnabledSuccessfully) server.ConnectionContext.ExecuteNonQuery(スクリプト)場合のステートメント

を実行する前に、

解決策は以下です。 using System.Runtime.CompilerServices; using System.Runtime.InteropServices; パブリッククラス静的クラス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(); 
    } 
} using System.Runtime.CompilerServices; 

using System.Runtime.InteropServices; パブリッククラス静的クラス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(); 
    } 
}