2014-02-28 2 views
0

.net4 설치 프로그램을 사용하여 .net4로 작성된 응용 프로그램을 설치하려고합니다. 이제 문제는 설치 프로그램에서 .net2의 견인 어셈블리를 사용하고 있으므로 설치 프로그램을 실행할 때 실패합니다. 이 메시지가있는 메시지 "혼합 모드 어셈블리는 런타임 버전 'v2.0.50727'에 대해 작성되었으며 추가 구성 정보없이 4.0 런타임에는로드 할 수 없습니다." 이제 문제는 문제는 내가 무엇을 할 수 내가 설치 클래스 에서이 작업을 수행 할 수 있습니다.net 설치 프로젝트 구성.

<?xml version="1.0"?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
    </startup> 
</configuration> 

의 app.config에서이 선으로 해결 할 수 있습니까?

답변

1

마침내 깊은 검색 후 나는

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

그때 내가 신용의이고 당신은 신용을 포함해야이

if (RuntimePolicyHelper.LegacyV2RuntimeEnabledSuccessfully) 
    { 
    //my mixed mode dell call goes here 
    } 
+0

처럼 내 코드에서 사용하는 코드에 의해 사용자 useLegacyV2RuntimeActivationPolicy이다 해결책을 발견 정당한; http://reedcopsey.com/2011/09/15/setting-uselegacyv2runtimeactivationpolicy-at-runtime/ – Tiny

관련 문제