C# 사용자 정의exe 참조의 dll 경로
MSDN 텍스트:https://msdn.microsoft.com/library/twy1dw1e(v=vs.100).aspx
<runtime>의 <assemblybinding> 요소
.NET Framework 4
기타 버전
프로그램 집합 버전 리셋과 프로그램 집합 위치에 대한 정보를 포함합니다.
복제하다
<assemblyBinding
xmlns="urn:schemas-microsoft-com:asm.v1" appliesTo="v1.0.3705">
</assemblyBinding>
특성 및 요소
다음 단원에서는 속성, 하위 요소 및 상위 요소를 설명합니다.
특성
특성
설명
xmlns
필수 특성.프로그램 세트 바인딩에 필요한 XML 네임스페이스를 지정합니다.문자열'urn:schemas-microsoft-com:asm.v1'을 값으로 사용합니다.
appliesTo
지정NET Framework 프로그램 세트가 적용된 런타임 버전으로 리디렉션됩니다.이 옵션은 를 사용합니다.NET Framework 버전 번호는 해당 버전을 나타냅니다.appliesTo 기능이 지정되지 않으면
하위 요소
원소.
설명
봉인된 프로그램 집합의 귀속 정책과 프로그램 집합 위치입니다.프로그램 집합마다
프로그램 집합을 불러올 때 공용어가 실행될 때 검색할 하위 디렉터리를 지정합니다.
실행할 때 출판사 정책을 사용할지 여부를 지정합니다.
프로그램 집합의 일부 이름을 사용할 때 동적으로 불러올 프로그램 집합의 전체 이름을 지정합니다.
부모 요소
원소.
설명
configuration
모든 프로필의 루트 요소, 상용 언어runtime와.NET Framework 응용 프로그램에서 이러한 파일을 사용합니다.
runtime
프로그램 집합 귀속과 쓰레기 회수에 대한 정보를 포함합니다.
예제
다음 예는 프로그램 집합 버전을 다른 버전으로 바꾸고 기본 코드를 제공하는 방법을 보여 줍니다.
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="myAssembly"
publicKeyToken="32ab4ba45e0a69a1"
culture="neutral" />
<bindingRedirect oldVersion="1.0.0.0"
newVersion="2.0.0.0"/>
<codeBase version="2.0.0.0"
href="http://www.litwareinc.com/myAssembly.dll"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
다음 예제에서는 appliesTo 특성을 사용하여 방향을 변경하는 방법을 보여 줍니다.NET Framework 프로그램 세트 바인딩.
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" appliesTo="v1.0.3705">
<dependentAssembly>
<assemblyIdentity name="mscorcfg" publicKeyToken="b03f5f7f11d50a3a" culture=""/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime
exe dll , 3
1. 앱에서.config에서 구성
<runtime>
<gcConcurrent enabled="true" />
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<publisherPolicy apply="yes" />
<probing privatePath="32;64" />
</assemblyBinding>
</runtime>
2. AppDomain.CurrentDomain.AppendPrivatePath
3.new AppDomainSetup().PrivateBinPath 설정
if (AppDomain.CurrentDomain.IsDefaultAppDomain())
string appName = AppDomain.CurrentDomain.FriendlyName;
AppDomainSetup setup = new AppDomainSetup();
setup.PrivateBinPath = "Libs";
string.Format("\\Config\\{0}.config", appName);
int ret = newDomain.ExecuteAssemblyByName(currentAssembly.FullName, e.Args);
Environment.ExitCode = ret;
return;
if (AppDomain.CurrentDomain.IsDefaultAppDomain())
{
string appName = AppDomain.CurrentDomain.FriendlyName;
var currentAssembly = Assembly.GetExecutingAssembly();
AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationBase = System.Environment.CurrentDirectory;
setup.PrivateBinPath = "Libs";
setup.ConfigurationFile = setup.ApplicationBase +
string.Format("\\Config\\{0}.config", appName);
AppDomain newDomain = AppDomain.CreateDomain("NewAppDomain", null, setup);
int ret = newDomain.ExecuteAssemblyByName(currentAssembly.FullName, e.Args);
AppDomain.Unload(newDomain);
Environment.ExitCode = ret;
Environment.Exit(0);
return;
}
그러나 가끔은 그를 config 파일에 놓고 코드로만 실현하고 싶지 않다. 두 번째 방법은 이미 기한이 지났다는 것을 발견했다. 세 번째 방법은 MSDN 언어가 명확하지 않고 인터넷에도 자료가 없다. 현재는 네 번째 방법을 사용하고 있다.
4. AppDomain에 Assembly Resolve 이벤트가 있습니다. dll을 불러오는 데 실패할 때 터치하면 이 이벤트에서 처리할 수 있습니다.
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
///
///
static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
string path = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Libs\");
path = String.Format(@"{0}.dll", path);
}
/// <summary>
/// dll
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
/// <returns></returns>
static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
string path = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Libs\");
path = System.IO.Path.Combine(path, args.Name.Split(',')[0]);
path = String.Format(@"{0}.dll", path);
return System.Reflection.Assembly.LoadFrom(path);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.