C# 在访问otherAppdomain中的程序集时,如何反映在其他appdomain中的程序集中所做的更改

C# 在访问otherAppdomain中的程序集时,如何反映在其他appdomain中的程序集中所做的更改,c#,C#,我通过在另一个Appdomain中加载程序集来访问另一个应用程序中的一个程序集,它工作正常 我的问题是:如果我在程序集中进行更改并构建它,这些更改不会反映在我创建另一个appdomain以访问它的应用程序中,除非我构建应用程序 Plz让我知道在这种情况下,如何在不构建应用程序的情况下访问程序集 谢谢, Gagan dhamija您必须首先卸载appdomain,然后重新创建它,并加载更新的程序集 AppDomain lAppDomain = null; AppDomainManager appD

我通过在另一个Appdomain中加载程序集来访问另一个应用程序中的一个程序集,它工作正常

我的问题是:如果我在程序集中进行更改并构建它,这些更改不会反映在我创建另一个appdomain以访问它的应用程序中,除非我构建应用程序

Plz让我知道在这种情况下,如何在不构建应用程序的情况下访问程序集

谢谢,
Gagan dhamija

您必须首先卸载appdomain,然后重新创建它,并加载更新的程序集

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");

这就是我正在使用的,但没有反映出更改

这并不完全正确,我遇到了问题,尤其是在托管DLL调用本机DLL时。尤其是旧dll仍然驻留,这会导致明显的“内存泄漏”外观问题。@ivo s:如果不小心,当然会遇到问题,尤其是程序集/类型跳过appdomain边界,从而导致无法卸载。但这是一个完全不同的问题。@leppie:如果你不知道自己在做什么,你可以花上几天的时间来决定改变方法。我敢打赌,在实践中,作者会遇到困难。@ivo s:当我开始C#:)时,我花了数周时间来理解这一点,这是一个需要时刻考虑的设计决策(除非你想最终为所有东西创建包装器,就像我几年前做的那样)@leppie:我也浪费了几个星期:)只是作者看起来不太可能做到。有几个可能的完全相同的副本,可以提供关于如何做的相当多的细节,但作者没有找到它们,所以我认为这对他的情况不太好。尝试更改为lDomainSetup.ShadowCopyDirectories=@“C:\Users\gagan.dhamija\Desktop\My project\MainClass\MainClass\bin\Debug”;一些可能有助于您突破appdomain边界的链接已位于
Assembly[]CollectionAssembly=lappodomain.GetAssemblies()