草庐IT

appDomain

全部标签

c# - 我可以告诉 CLR 通过引用在 AppDomain 之间编码(marshal)不可变对象(immutable对象)吗?

当在.NET中的AppDomain之间编码(marshal)对象时,CLR将序列化对象(如果它具有Serializable属性)或生成一个代理(如果它继承自MarshalByRef)然而,对于字符串,CLR只会将对字符串对象的引用传递到新的AppDomain中。CLR仍然确保完整性,因为.NET字符串是不可变的,并且第二个AppDomain对字符串的任何更改都不会影响原始对象。这让我想到了我的问题:有没有办法告诉CLR我的自定义类型是不可变的,并且当用于远程处理时,它应该只传递对对象的引用,就像它对字符串类所做的那样? 最佳答案 编

c# - LoaderOptimizationAttribute 的作用

我已经写了一小段关于动态加载程序集和从这些程序集创建类实例的代码,包括一个可执行文件、一个要动态加载的测试库和一个将动态程序集加载到新中的加载器库应用域。加载程序库被可执行文件和动态库引用。//executable[System.STAThreadAttribute()][System.LoaderOptimization(LoaderOptimization.MultiDomain)]staticvoidMain(string[]args){AppDomainSetupdomainSetup=newAppDomainSetup(){ApplicationBase=AppDomain.

c# - NLog 配置为自动记录所有异常?

有没有办法将NLog配置为自动记录我的应用程序可以发送的所有异常?目前,我将转到所有TRY/CATCHblock并在CATCH中手动添加日志记录——但如果我错过了一些怎么办?如果将来有人这样做怎么办有没有办法告诉NLog总是记录所有异常?特别是一些未被捕获并可能导致弹出窗口的内容? 最佳答案 据我所知,没有办法限制NLog来记录所有异常。如果您只想记录未处理的异常,您可以在初始化应用程序时向AppDomain添加一个“UnhandledExceptionHandler”。请注意,在某些情况下,可能无法记录错误(例如,在发生OutOf

c# - 托管 clr 并捕获线程异常

我正在尝试编写一个可以加载托管插件的插件系统。如果有任何异常,主机应该能够卸载插件。对于我的poc,我在C#中有一个示例代码库,它会抛出这样的异常...publicstaticintStartUp(stringarguments){Console.WriteLine("Startedexceptionthrowerwithargs{0}",arguments);ThreadworkerThread=newThread(()=>{Console.WriteLine("Startingathread,doingsomeimportantwork");Thread.Sleep(1000);t

c# - Multi-Tenancy ASP .NET 应用程序中的隔离

我正在构建一个Multi-TenancyASP.NET应用程序。鉴于每个租户都可以动态配置他们的应用程序(这可能涉及将动态自定义程序集加载到内存中),我需要一种隔离每个租户的方法。出于维护原因,我不希望为每个租户创建新的Web应用程序。我一直在考虑使用AppDomainManager为每个应用程序创建一个AppDomain,但它似乎不适用于ASP.NET应用程序。有人对这个问题有什么建议吗?谢谢。 最佳答案 我想问题是:如果您不喜欢创建Web应用程序,那么您真正可以接受哪种类型的隔离?如果您真的想要一种操作系统级别的保证程序集不会相

c# - 如何自动化测试中等信任代码

我想编写以中等信任度运行并在需要完全信任度时失败的自动化测试。我正在编写一个库,其中某些功能仅在完全信任的情况下可用,我想验证我希望在中等信任情况下运行的代码是否可以正常工作。如果还想知道如果我更改需要完全信任的类,我的测试将失败。我已尝试创建另一个AppDomain并加载中等信任PolicyLevel,但在尝试运行跨AppDomain回调时,我总是遇到程序集错误或其依赖项无法加载。有办法解决这个问题吗?更新:基于回复,这是我所拥有的。请注意,您正在测试的类必须扩展MarshalByRefObject。这是非常有限的,但我看不到解决方法。usingSystem;usingSystem.

c# - 如何强制 MSTEST TestMethod 在运行前重置所有单例/静态?

我在VisualStudio2008中使用MSTEST。如何让某个测试类中的每个单元测试方法都像第一个运行的测试一样运行,以便在运行每个测试之前重置所有全局状态?我不想使用TestInitialize、ClassInitialize、AssemblyInitialize等显式清理世界。例如:[TestClass]publicclassMyClassTests{[TestMethod]publicvoidTest1(){//The"Instance"propertycreatesanewinstanceof"SomeSingleton"//ifithasn'tbeencreatedbef

c# - AppDomain 是否等同于 .NET 代码的进程?

我必须调用一些写得不好的第3方COM组件,这些组件存在内存泄漏并在长时间运行的进程中使用单线程单元[STA]。我知道单独的进程将是实现它的好方法,我可以偶尔从长时间运行的进程中重新启动它。可以使用AppDomain代替吗?如果适当标记,AppDomain线程是否为STA线程?它有自己的COM对象内存吗?卸载AppDomain是否等同于终止进程? 最佳答案 AppDomain不提供与进程相同程度的隔离。事实上,如果您担心第3方组件状态不佳,则存在风险,它会破坏您的.NET应用程序。如果卸载时正在执行非托管代码,则无法卸载AppDoma

c# - AppDomain 间通信问题

我一直在用C#开发Windows服务。服务启动时会提供一组配置文件路径。对于这些文件中的每一个,该服务将启动一个AppDomain,使用该文件作为其ConfigurationFile,并将此文件的文件夹作为ApplicationBase。每个文件夹都有一个设置为PrivateBinPath的“bin”文件夹。这些文件夹中的“bin”文件夹包含一个与服务共享的小程序集,该程序集包含接口(interface)IServiceHost。实现IServiceHost接口(interface)的类的类型名称和程序集名称也是已知的。整个CreateServiceHost方法如下所示:-public

c# - 使用 AppDomain 加载/卸载外部程序集

我的场景如下:创建新的AppDomain加载一些程序集对加载的dll施展魔法卸载AppDomain以释放内存和加载的库下面是我尝试使用的代码classProgram{staticvoidMain(string[]args){Evidencee=newEvidence(AppDomain.CurrentDomain.Evidence);AppDomainSetupsetup=AppDomain.CurrentDomain.SetupInformation;Console.WriteLine("CreatingnewAppDomain");AppDomainnewDomain=AppDom