Tag: appdomainsetup

自定义AppDomain和PrivateBinPath

我正在使用c#4.0和一个仅用于测试的控制台应用程序,以下代码确实给出了exception。 AppDomainSetup appSetup = new AppDomainSetup() { ApplicationName = “PluginsDomain”, ApplicationBase = AppDomain.CurrentDomain.BaseDirectory, PrivateBinPath = @”Plugins”, ConfigurationFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile }; AppDomain appDomain = AppDomain.CreateDomain(“PluginsDomain”, null, appSetup); AssemblyName assemblyName = AssemblyName.GetAssemblyName(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, “Plugins”, “sample.dll”)); Assembly assembly = appDomain.Load(assemblyName); //This gives an exception of File not found AppDomain.Unload(appDomain); 在我创建的AppDomain上使用Load时,我一直收到File not foundexception。 谢谢。

在不同的AppDomain中加载具有依赖项的程序集

我的目标是在两个给定的文件夹之间进行缺少的依赖性检查。 想象一下以下设置。 根\ DIRA \ A.DLL 根\ DIRB \ B.DLL B取决于A. 因此,给定这些文件夹,我想创建一个新的AppDomain,加载B.dll并让DirA(A.dll)的依赖关系自动解析并隔离在新的AppDomain中。 隔离是关键,因为当我卸载这个AppDomain时,我想创建一个新的,可能DirA再次作为依赖,但DirC库需要它,所以在DirC依赖DirB的情况下,我希望它抛出一个例外。 编辑:添加代码示例,以防有助于更好地描述我的问题。 AppDomainSetup setup = new AppDomainSetup(); setup.ApplicationBase = @”C:\Root”; setup.ApplicationName = “Isolated Domain” setup.PrivateBinPath = @”DirA;DirB”; setup.PrivateBinPathProbe = “”;//disable search in AppBase.. var domain = AppDomain.CreateDomain(Guid.NewGuid().ToString(), AppDomain.CurrentDomain.Evidence, setup, AppDomain.CurrentDomain.PermissionSet); //The following statement in theory should pick B.dll’s dependency from DirA. var assembly […]

为什么AppDomainSetup.ShadowCopyFiles是一个字符串?

从文档 : 包含字符串值“true”的String,表示启用了卷影复制; 或“false”表示阴影复制已关闭。 从1.1开始就是这样。 谁能摆脱任何光明? 我reflection了吸气剂和制定者以获得良好的衡量标准: public string ShadowCopyFiles { get { return this.Value[8]; } set { if ((value != null) && (string.Compare(value, “true”, StringComparison.OrdinalIgnoreCase) == 0)) { this.Value[8] = value; } else { this.Value[8] = null; } } } //The referenced Value property… internal string[] Value { get { if (this._Entries == null) […]

从AppDomain卸载.DLL所需的帮助 – 即使使用ShadowCopy仍然无法正常工作

我正在尝试执行以下操作。 应用程序A是“母亲应用程序”。 它保持开放。 App B只是一个.DLL,我写了一些从App A中指定的接口派生的类。 然后,从App A,我将从App B“导入”类并在其中运行方法。 我希望能够动态更改App B(更改代码并重新编译)并使用App A中的新代码。 我在App B中有一个后编译命令,它将新的.DLL复制到App A目录。 应用A创建一个新的AppDomain并使用ShadowCopying。 我认为这就足够了,但是当我尝试重新编译和复制App B的新.DLL时,它表示该文件正在使用中且无法覆盖。 这是我现在的代码: App A(代码中的TestServer): namespace TestServer { public interface IRunnable { void Run(); } class Program { static void Main(string[] args) { AppDomainSetup setup = new AppDomainSetup(); setup.ApplicationName = “DemoApp”; setup.ApplicationBase = Environment.CurrentDirectory; setup.ShadowCopyDirectories = Environment.CurrentDirectory; setup.ShadowCopyFiles = […]