2015-04-04 2 views
-2

Все мои проекты настроены для использования .net 4.5.1 В тестовом проекте используются некоторые сборки SQl Server, ориентированные на .NET v2.0.50727.Невозможно загрузить сборку смешанного режима

App.config:

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

Я также проверил эту тему среди других: Mixed mode assembly

+1

Для всех, кто downvoted, лучше обеспечить решение вместо downvoting! Или оставьте комментарий, как было предложено, когда вы спускаете вниз! – Legends

+0

(* Я не являюсь нисходящим. *) Предположительно app.config копируется в папку вывода сборки и (например, ваша сборка запуска - 'ass.exe'), представленная как' ass.exe.config'. –

+0

Устанавливается как «Не копировать», только exe.config находится в бункере и настроен так, как указано выше ... hm. Проект, в котором возникает ошибка, является проектом тестирования C#. Это происходит, когда доступ к коду api из Microsoft.SqlServer * .dll. Theay скомпилированы на .NET v2.0.50727. – Legends

ответ

0

В качестве элемента запуска не делал это для меня, я пошел вместе со следующим подходом:

Detailed explanation

Используйте класс следующий помощник:

using System; 
    using System.Runtime.CompilerServices; 
    using System.Runtime.InteropServices; 

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

И прежде чем называть вещи SMO, просто проверить, что все в порядке

if (!RuntimePolicyHelper.LegacyV2RuntimeEnabledSuccessfully) 
       throw new Exception("Could not load SMO"); 
Смежные вопросы