草庐IT

appDomain

全部标签

c# - 在不加载到当前 AppDomain 的情况下获取自定义程序集属性

我创建了一个小应用程序,用于在提供的目录中递归加载程序集并读取它们的自定义属性集合。主要是为了读取DebuggableAttribute以确定IsJITTrackingEnabled和IsJITOptimizerDisabled的设置以确定程序集是否针对发布进行了优化。我当前的代码执行Assembly.LoadFrom以将整个路径传递到程序集并加载它。然后对程序集执行GetCustomAttributes以获取可调试属性。问题是每个程序集都被加载到当前的应用程序域中。因此,如果另一个文件夹使用相同的程序集,它只使用最初加载的引用。我希望能够加载程序集,读取我需要的属性,然后卸载它。我尝

c# - 如何为每个 xUnit.net 测试方法使用单独的 AppDomain?

xUnit对整个测试程序集使用相同的AppDomain,这是有问题的,因为我正在测试一个UI库并且需要为每个人创建一个新的Application实例测试。它在我运行单个测试时有效,但是当我RunAll时,第一个测试通过了,但是所有后续测试都失败了,CannotcreatemorethanoneSystem.Windows.Applicationinstancein在我创建新的Application对象的行中使用相同的AppDomain。 最佳答案 也许您可以尝试像这样制作您的测试类:publicclassDomainIsolated

c# - 序列化异常 : Type is not resolved for member "..."

我一直在尝试将程序集动态加载到AppDomain。我需要这样做是因为我想动态调用一个方法,但在我的应用程序运行时不要保留DLL的句柄,以便在需要时可以替换它。但我收到此SerializationException异常:类型未解析成员“...”这是我的代码:AppDomaindomain=AppDomain.CreateDomain("TempAppDomain",null,AppDomain.CurrentDomain.SetupInformation);try{objectobj=domain.CreateInstanceFromAndUnwrap(dllPath,typeName)

c# - 结合应用程序域远程处理和任务时出现死锁

我的应用程序需要将插件加载到单独的应用程序域中,然后在其中异步执行一些代码。我已经编写了一些代码来将Task包装在可编码类型中:staticclassRemoteTask{publicstaticasyncTaskClientComplete(RemoteTaskremoteTask,CancellationTokencancellationToken){Tresult;using(cancellationToken.Register(remoteTask.Cancel)){RemoteTaskCompletionSourcetcs=newRemoteTaskCompletionSou

c# - 跨 AppDomain 调用破坏了运行时

这本来是一个比较冗长的问题,但现在我构建了一个更小的可用示例代码,因此原文不再相关。我有两个项目,一个包含一个没有成员的结构,名为TestType。该项目被主项目引用,但程序集不包含在可执行目录中。主项目创建一个新的应用程序域,它在其中使用包含的程序集的名称注册AssemblyResolve事件。在主应用程序域中,处理相同的事件,但它手动从项目资源加载程序集。然后新的应用程序域构建了它自己的TestType版本,但比原始版本具有更多字段。主应用域使用虚拟版本,新应用域使用生成的版本。当调用在其签名中具有TestType的方法时(即使只是返回它就足够了),它似乎只会破坏运行时的稳定性并破

c# - AppDomain.FirstChanceException 和堆栈溢出异常

我正在使用FirstChanceException事件记录有关任何引发的异常的详细信息。staticvoidMain(string[]args){AppDomain.CurrentDomain.FirstChanceException+=(sender,eventArgs)=>{Console.WriteLine("Insidefirstchanceexception.");};thrownewException("Exceptionthrowninmain.");}这按预期工作。但是,如果在事件处理程序中抛出异常,则会发生堆栈溢出,因为事件将递归引发。staticvoidMain(s

c# - 在 .NET 中,是否在创建新的 AppDomain 时调用静态构造函数?

当我在C#中使用AppDomain.CreateDomain创建一个新的AppDomain时,当组件加载到新创建的AppDomain中时,是否会调用静态构造函数?有问题的程序集已经加载到当前域中。 最佳答案 否-静态构造函数只会在第一次访问静态成员或创建实例时调用。不过,静态构造函数将在每个AppDomain中调用一次,如果您担心的话。这不像在不同的AppDomain中执行过一次,新AppDomain中的类型未初始化:)请注意,没有静态构造函数的类型的类型初始值设定项可能比有静态构造函数的类型早于或晚于执行,具体实现细节change

c# - AppDomain,处理异常

我正在开发一个大型应用程序,其中包含许多较小的插件/应用程序。它们不够大,不能成为一个完整的进程,但又太小,无法在线程中、在一个进程下运行,而且我希望它基于插件。如果该插件的更新版本可用,则应将其卸载、更新并重新启动。在我寻找解决方案的过程中,我偶然发现了神奇的词AppDomain,我引用了:"Useapplicationdomainstoisolatetasksthatmightbringdownaprocess.IfthestateoftheAppDomainthat'sexecutingataskbecomesunstable,theAppDomaincanbeunloadedw

c# - 如何将变量从一个应用程序域传递到另一个应用程序域

我想知道,如果我有一个变量,例如一个字符串,如何将它的值传递给我的新应用域:staticstring_str;staticvoidMain(string[]args){_str="abc";AppDomaindomain=AppDomain.CreateDomain("Domain666");domain.DoCallBack(MyNewAppDomainMethod);AppDomain.Unload(domain);Console.WriteLine("Finished");Console.ReadKey();}staticvoidMyNewAppDomainMethod(){Co

c# - 多次调用 Assembly.Load 的副作用

如果多次调用Assembly.Load会产生副作用吗?例如for(inti=0;i这会加载程序集一次,不是吗?我已经检查过AppDomain.CurrentDomain.GetAssemblies()之前和之后,它似乎加载了一次(应该如此)但是它有副作用吗?在长时间运行的服务器应用程序中(运行数月/数年而无需重新启动)上述是否会导致任何问题? 最佳答案 Thisloadstheassemblyonetimedoesn'tit?是的。程序集被加载到当前的AppDomain中,并且只会被加载到该AppDomain中一次。多次调用它只会返