2011-01-06 6 views
0

다른 Appdomain에 어셈블리를로드하여 다른 응용 프로그램에서 하나의 어셈블리에 액세스하고 있습니다.otherAppdomain에서 어셈블리에 액세스하는 동안 어셈블리에서 수행 한 변경 사항을 다른 응용 프로그램 참조에 반영하는 방법

내 질문입니다 : 내가 어셈블리에서 변경하고 빌드, 변경 사항은 내가 응용 프로그램을 빌드하지 않는 한 그것에 액세스하기위한 다른 appdomain을 만든 응용 프로그램에 반영되지 않습니다.

Plz이 경우 응용 프로그램을 빌드하지 않고 어떻게 어셈블리에 액세스 할 수 있는지 알려주십시오.

감사합니다, 가갠 dhamija

답변

1

먼저, 응용 프로그램 도메인을 언로드 한 후 다시 작성하고 업데이트 된 어셈블리를로드해야합니다.

+0

이 완전히 옳지 않다을 반영하고 있지 않다 무엇을, 나는 특히 네이티브 DLL을 호출하는 관리되는 DLL이 문제로 실행했습니다. 특히 눈에 띄는 '메모리 누수'문제를 일으키는 오래된 dll 거주자의 경우. – user44298

+0

@ivo s : 조심하지 않으면 당연히 문제가 될 것입니다. 특히 appdomain 경계 위로 뛰어 오르는 어셈블리/유형이있어 언로드가 불가능합니다. 그러나 그것은 완전히 다른 문제입니다. – leppie

+0

@leppie : 당신이하고있는 일을 알지 못하면 접근법 변경 결정에 며칠을 보낼 수 있습니다. 나는 실제적으로 저자가 어려움에 처하게 될 것이라고 확신한다. – user44298

0
AppDomain lAppDomain = null; 
AppDomainManager appDomainManager = new AppDomainManager(); 

AppDomainSetup lDomainSetup = new AppDomainSetup(); 
lDomainSetup.ApplicationName = "OtherAppDomain"; 
lDomainSetup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory; 
lDomainSetup.PrivateBinPath = "bin"; 
lDomainSetup.CachePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "cache\\"); 
lDomainSetup.ShadowCopyFiles = "true"; 
lDomainSetup.ShadowCopyDirectories = @"C:\Users\gagan.dhamija\Desktop\My project\MainClass\MainClass\bin\Debug\MainClass.dll"; 
lAppDomain = appDomainManager.CreateDomain("OtherDomain", null, lDomainSetup); 

lAppDomain.Load("MainClass"); 
lAppDomain.InitializeLifetimeService(); 

Assembly[] CollectionAssembly = lAppDomain.GetAssemblies(); 

foreach (Assembly assembly in CollectionAssembly) 
{ 
    if (assembly.FullName == "MainClass, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null") 
     Exportedvalues = GetAllExportedTypes(assembly); 
} 

MessageBox.Show("Loaded Assembly succesfully"); 

이 내가 사용하지만, 변경

+0

lDomainSetup.ShadowCopyDirectories = @ "C : \ Users \ gagan.dhamija \ Desktop \ My project \ MainClass \ MainClass \ bin \ Debug"로 변경하십시오. – user44298

+0

도움이 될만한 링크 http://jdscolam.blogspot.com/2008/01/joys-of-appdomains.html – user44298

+0

이미 Assembly [] CollectionAssembly = lAppDomain.GetAssemblies();에 appdomain 경계를 위반하고 있습니다. 앞서 논의한 것처럼 계획을 실제로 설계해야합니다. – leppie

관련 문제