2011-01-06 9 views
0

他のアプリケーションのアセンブリにアクセスしようとしています。他のアプリケーションドメイン内のアセンブリにアクセスする際に、アセンブリ内の変更を他のアプリケーションドメインに反映する方法

私の質問は、アセンブリを変更してビルドした場合、アプリケーションをビルドしない限り、アプリケーションにアクセスするための別のappdomainを作成したアプリケーションに反映されません。

Plzこの場合、アプリケーションをビルドせずにアセンブリにアクセスする方法を教えてください。

おかげで、 GAGAN dhamija

答えて

1

あなたはまず、のAppDomainをアンロードし、それを再作成し、更新されたアセンブリをロードする必要があります。

+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

関連する問題