문제

작업 문제가 있습니다 Microsoft.build.buildengine 다음을 추가하기 위해 .exe.config 파일을 수정하여 고정 된 수정을 받아야합니다.

<?xml version ="1.0"?>
<configuration>
        <runtime>
           <assemblyBinding xmlns="urnchemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="Microsoft.Build.Framework" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
                <bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="3.5.0.0"/>
            </dependentAssembly>
                <assemblyIdentity name="Microsoft.Build.Engine" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
                <bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="3.5.0.0"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

내 문제는 파일을 수정할 수없고 코드로 파일을 수정해야한다는 것입니다. 그리고 그것이 가능하다고 생각합니다.

그러나 어떻게?, 내 애플리케이션이 구성 파일에서 위의 변경이 이루어진 것처럼 실행되도록 어떻게 어울리는가?

도움이 되었습니까?

해결책

나는 비슷한 문제로 어려움을 겪고있었습니다. 열쇠는 사용하는 것입니다 AppDomain.assemblyresolve 이벤트. 내 코드는 다음과 같습니다.

    public void LoadStuff(string assemblyFile)
    {
        AppDomain.CurrentDomain.AssemblyResolve += 
            new ResolveEventHandler(CurrentDomain_AssemblyResolve);
        var assembly = Assembly.LoadFrom(assemblyFile);

        // Now load a bunch of types from the assembly...
    }

    Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
        var name = new AssemblyName(args.Name);
        if (name.Name == "FooLibrary")
        {
            return typeof(FooClass).Assembly;
        }
        return null;
    }

이는 버전 번호를 완전히 무시하고 이미로드 된 라이브러리를 "Foloibrary"라는 라이브러리 참조로 대체합니다. 다른 속성을 사용할 수 있습니다 AssemblyName 더 제한적이되고 싶다면 수업. FooClass Foolibribrary 어셈블리의 모든 수업이 될 수 있습니다.

다른 팁

이를 수행하는 한 가지 방법은 시작될 때 별도의 AppDomain에서 원래 앱을 시작할 부트 스트랩 앱을 만드는 것입니다. 새 도메인을 설정하면 구성 파일을 프로그래밍 방식으로 빌드 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top