标签: appdomain

是否有可能导致在另一个应用程序域中创建一个线程?

假设我有一个非默认的应用域名.我想获得对默认应用程序域的引用,并导致在其中创建一个运行一段代码的线程.这可能吗?我能想到这样做的唯一方法是将我的程序集重新加载到Default app域中,并在一个类型的构造函数中有一些逻辑,这些构造函数表明它已经被重新加载以启动这个新线程.这似乎相当复杂.有更直接的方法吗?另一方面,如果有一种方法可以做到这一点,那似乎会绕过.NET的整个安全模型.

.net c# appdomain

2
推荐指数
1
解决办法
2340
查看次数

在.NET 4.0过程中创建.NET 2.0 AppDomain

我需要在.NET 4.0进程中动态创建.NET 2.0兼容程序集.目前通过以下方式实现:

AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly(...)
ModuleBuilder  mb = assemblyBuilder.DefineDynamicModule(...);
Run Code Online (Sandbox Code Playgroud)

但不幸的是,所有dll的产生都是.NET 4.0(继承自我的4.0进程),这与我的其他.NET 2.0进程无关.

知道2个不同的CLR版本的AppDomain如何在同一个进程中共存?

.net c# clr appdomain

2
推荐指数
1
解决办法
1675
查看次数

是否可以在隔离环境中执行上载的.NET代码?

在.NET网站中,我需要获取用户提交的代码,编译并执行它.但我需要在隔离的环境中执行代码,这样任何恶意代码都不会损害我的系统(例如,不应该执行任何Directory.Delete("C:\ Windows")).

是否可以在一种chroot环境中执行代码?

c# asp.net reflection appdomain isolation

2
推荐指数
1
解决办法
509
查看次数

如何处理AppDomain.Unload和相关的ThreadAbortException

根据MSDN,AppDomain.Unload导致卸载AppDomain中的所有线程抛出线程中止异常.

域中的线程使用Abort方法终止,该方法在线程中抛出ThreadAbortException.虽然线程应该立即终止,但它可以在finally子句中继续执行不可预测的时间量.- 来自MSDN

所以我的理解是每次我在任何预期在这个AppDomain中运行的代码编写代码时,我都不得不期望任何线程都可以随时发生线程中止.这是真的?所有代码都应该假设可以随时抛出ThreadAbortException吗?

实际上这实际上是elimates catch(Exception ex),因为它会捕获ThreadAbortException并尝试处理它,通常是通过记录一个真的不应该记录的错误(因为卸载AppDomain实际上不是一个例外).

是否还需要考虑其他因素以避免不必要的异常处理/错误记录?

.net c# appdomain threadabortexception

2
推荐指数
1
解决办法
2119
查看次数

.NET程序集加载

在加载某些程序集时,ASP.NET是否将所有依赖项程序集(位于BIN文件夹中)加载到默认的appdomain?或者它将"按需"加载(当CLR需要依赖程序集中的某种类型时)?

.net appdomain .net-assembly

2
推荐指数
1
解决办法
341
查看次数

尝试访问调用AzMan的已卸载appdomain

在ASP.NET MVC Web应用程序中,我偶尔会看到以下错误:

System.AppDomainUnloadedException:尝试访问已卸载的appdomain.(来自HRESULT的异常:0x80131014)在Microsoft.Interop.Security的System.StubHelpers.StubHelpers.GetCOMHRExceptionObject(Int32hr,IntPtr pCPCMD,Object pThis)的System.StubHelpers.StubHelpers.InternalGetCOMHRExceptionObject(Int32hr,IntPtr pCPCMD,Object pThis)中. AzRoles.IAzApplication.OpenOperation(String bstrOperationName,Object varReserved)

抛出此异常的代码行是这样的:

IAzOperation operation = _azManApp.OpenOperation(operationName);
Run Code Online (Sandbox Code Playgroud)

大多数时候,代码工作正常.当错误发生时,它似乎再次出现,以便回收AppPool是唯一的好办法.

我该怎么做才能防止这种情况发生?

c# azman appdomain asp.net-mvc-3

2
推荐指数
1
解决办法
9499
查看次数

C# - 从另一个AppDomain中的方法返回值

我有一个场景,我从我的C#代码中的操作添加DLL到GAC.然后我需要对新添加的DLL执行Assembly.Load.但是,由于进程启动时DLL不在GAC中,因此返回null.

因此,我看到代码可以在不同的AppDomain中运行,这将导致DLL在单独的AppDomain中从GAC获得.

如何将其他AppDomain中的值返回到主线程?

我只是想跑:

var type = Assembly.Load(assembly).GetType(className);

让它从其他AppDomain返回到我的主线程.

提前致谢.

c# appdomain

2
推荐指数
2
解决办法
4536
查看次数

如何处理阻塞同步外部DLL方法

最近我使用外部DLL库,我对它没有任何影响.在某些特殊情况下,此第三方dll的方法是阻塞并且永不返回.

我试图通过在新的AppDomain中执行此方法来解决此问题.在自定义超时后,我想卸载AppDomain并杀死所有这些垃圾;)

不幸的是,它不起作用 - 正如有人所期望的那样.

一段时间后,它会抛出CannotUnloadAppDomainException,因为阻塞方法不允许正常中止线程.

我依赖于使用这个库,似乎不会很快有更新.

那么我可以解决这个问题,即使这不是最佳做法吗?任何糟糕的黑客赞赏:)

.net c# com parallel-processing appdomain

2
推荐指数
1
解决办法
769
查看次数

如何从Bin目录访问Web API应用程序的Xml文件?

我已经尝试过以下选项:

var resourcePath = "data.xml";
Application files are located in: c:/MyApp/bin/Release.
AppDomain.CurrentDomain.BaseDirectory refers to "c:/MyApp" folder.
AppDomain.CurrentDomain.SetupInformation.PrivateBinPath refers to "c:/MyApp/bin/Release" folder.
HttpContext.Current.Server.MapPath(resourcePath) refers to http://www.domain.com/MyApp/data.xml
Run Code Online (Sandbox Code Playgroud)

只有PrivateBinPath起作用,但是根据定义它可以包含多个bin目录,所以也许我不应该使用它。

Web API应用程序访问Bin文件夹中的文件的标准方法是什么?

c# asp.net appdomain httpcontext asp.net-web-api

2
推荐指数
1
解决办法
3559
查看次数

AppDomain之间共享静态类吗?

我有四个程序集,ModuleStatic,Loader以及ModuleA和ModuleB,除了可执行程序Loader之外,它们都是DLL。

在DLL ModuleStatic中:

public class ModuleStatic {
    public static string Foo { get; set; } = "Foo";    
}
Run Code Online (Sandbox Code Playgroud)

在Loader中,将通过Assembly.Load和AppDomain将ModuleA和ModuleB分别加载到domA和domB。如果ModuleA修改了ModuleStatic.Foo变量,则domB中的ModuleB会收到修改吗?

c# reflection appdomain

2
推荐指数
1
解决办法
984
查看次数