Tag: appdomain

如何最好地在AppDomains之间进行通信?

我有一个应用程序需要在多个AppDomain之间发送适量的消息。 我知道我可以使用远程实现这一点,但我也注意到,有跨域代表。 有没有人看过这种问题?

.NET核心中没有AppDomain! 为什么?

微软select不支持.NET Core中的AppDomain是否有很强的理由? 在构build长时间运行的服务器应用程序时,AppDomain特别有用,我们可能希望更新由服务器加载的程序集,而不会closures服务器。 没有AppDomains,我们将如何在长时间运行的服务器进程中replace我们的程序集? AppDomain也为我们提供了一种隔离服务器代码的不同部分的方法。 就像一个自定义websocket服务器可以在主appdomain中有套接字代码,而我们的服务在辅助appdomain中运行。 没有AppDomains,上面的情况是不可能的。 我可以看到一个论点,可能会谈论使用云的虚拟机概念处理程序集更改,而不必承担AppDomains的开销。 但这是微软认为还是说的? 或者他们有上述情况的特定原因和替代scheme?

如何加载reflection操作的.NET程序集,随后卸载它?

我正在编写一个工具来报告有关在我的客户端系统中部署的跨环境和区域的.NET应用程序的信息。 我想阅读这些程序集中的程序集属性的值。 这可以使用Assembly.ReflectionOnlyLoad来实现,但是即使这种方法也能保持程序集的加载。 这里的问题是我不能加载两个具有相同名称的程序集,所以自然不能比较在不同系统中部署的相同应用程序。 在这一点上,我假设解决scheme将涉及使用临时AppDomain的。 有人可以详细说明如何将程序集加载到另一个AppDomain ,从中读取属性,然后卸载AppDomain ? 这需要为文件系统上的程序集以及URL地址上的程序集起作用。

如何从主AppDomain卸载程序集?

我想知道如何卸载加载到主AppDomain的程序集。 我有以下代码: var assembly = Assembly.LoadFrom( FilePathHere ); 当我完成时,我需要/希望能够卸载这个程序集。 谢谢你的帮助。

使用AppDomain的很好的例子

在面试中我一直被问及AppDomain, 我知道基本知识 : 它们是应用程序内的隔离级别(使它们与应用程序不同) 他们可以有线程(使他们不同于线程) 一个appdomain中的exception不会影响另一个 AppDomain无法访问彼此的内存 每个appdomain可以有不同的安全性 我仍然没有得到什么使他们的必要。 我正在寻找一个合理的具体情况,当你使用一个。 回答: 不可信的代码 核心应用受保护 不受信任/第三方插件被禁止破坏共享内存和未经授权的访问registry或硬盘驱动器隔离在单独的具有安全限制的appdomain,保护应用程序或服务器。 例如ASP.NET和SQL Server托pipe组件代码 可信的代码 稳定性 应用程序分为安全,独立的function/function build筑灵活性 自由地在单个CLR实例或每个程序中运行多个应用程序。 还要别的吗?

在.NET 4.0中,我如何“沙盒”内存中的程序集并执行一个方法?

这就是为什么要问这个问题的原因: www.devplusplus.com/Tests/CSharp/Hello_World 。 虽然以前也有类似的问题,但网上有很多答案有几个问题: 这必须做“.Net 4.0”风格,而不是传统模式。 程序集在内存中,只能在内存中, 不能写入文件系统。 我想限制所有访问文件系统,networking等 像这样的东西: var evidence = new Evidence(); evidence.AddHostEvidence(new Zone(SecurityZone.Internet)); var permissionSet = SecurityManager.GetStandardSandbox(evidence); 到目前为止,我找不到一种方法来创build一个AppDomain,并加载一个不在文件系统上的程序集 ,而是在RAM中。 再次说明其他解决scheme无法正常工作的原因:1.很多是4.0以前版本,2.许多依赖于指向文件系统的“.Load”方法。 答案2:我有一个程序集引用,因为它是由CSharpCodeProvider类生成的,所以如果你知道一种方法把它变成一个字节数组,那将是完美的! 示例代码显示安全缺陷 var provider = new CSharpCodeProvider(new Dictionary<String, String> { { "CompilerVersion", "v4.0" } }); var compilerparams = new CompilerParameters { GenerateExecutable = false, GenerateInMemory = true, }; var compilerResults = […]

使用AppDomain替​​换Process.Start

背景 我有一个Windows服务使用各种第三方DLL来执行PDF文件的工作。 这些操作可以使用相当多的系统资源,偶尔在发生错误时似乎会遭受内存泄漏。 这些DLL是托pipe在其他非托pipeDLL周围的包装器。 当前解决scheme 我已经通过在专用控制台应用程序中调用某个DLL的调用并通过Process.Start()调用该应用程序来解决此问题。 如果操作失败,并且存在内存泄漏或未释放的文件句柄,则无关紧要。 该过程将结束,操作系统将恢复句柄。 我想将这个相同的逻辑应用到我的应用程序中使用这些DLL的其他地方。 然而,我并不是非常兴奋地为我的解决scheme添加更多的控制台项目,编写更多的调用Process.Start()的样板代码,并分析控制台应用程序的输出。 新解决scheme 一个优雅的替代专用控制台应用程序和Process.Start()似乎是使用AppDomains,像这样: http : //blogs.geekdojo.net/richard/archive/2003/12/10/428.aspx 。 我在我的应用程序中实现了类似的代码,但是unit testing并没有很好的前景。 我创build一个FileStream到一个单独的AppDomain中的testing文件,但不要处置它。 然后我尝试在主域中创build另一个FileStream,并由于未释放的文件locking而失败。 有趣的是,向工作域添加一个空的DomainUnload事件使得unit testing通过。 无论如何,我担心的是,也许创build“工人”AppDomain不会解决我的问题。 思考? 代码 /// <summary> /// Executes a method in a separate AppDomain. This should serve as a simple replacement /// of running code in a separate process via a console app. /// […]

Facebook应用程序创build应用程序域错误

我正在尝试创buildFacebook应用 然而,在创造精灵完成他的工作后,我却遇到了麻烦。 什么都不改变什么向导创build我有一个错误: Error You have specified an App Domain but have not specified a valid integration URL. secure-citadel-xxxx.herokuapp.com must be derived from one of: Site URL, Mobile Site URL, Canvas URL, Secure Canvas URL, Page Tab URL or Secure Page Tab URL. 我google了一下,发现它可能是没有答案.. 添加http://等等不会造成任何其他错误的域无效。 有人知道何处理吗?

通过Resharper运行NUnit由于AppDomain导致项目之间交叉时,8个testing失败

我最近更新到Resharper 8,当我试图运行一套项目。 这些testing包含两个集成testing套件,这两个testing套件都使用IISExpress来运行网站,发出Web请求并检查响应。 单独运行它们是成功的,运行所有的testing将会成功。 但是,在第二组testing运行失败之后。 调查显示AppDomain.CurrentDomain.BaseDirectory停留在运行而不是改变的第一个testing。 由于集成testing由两个项目组成,这导致第二个项目失败,因为找不到任何所需的configuration文件。 我无法find任何选项来禁用Resharper 8中的这种不同的行为,这似乎是/domain:Single的行为/domain:Single nunit标志。 对Resharper 7的降级不足,是否有人知道这个解决scheme? 这是Resharper 8的一个预期的行为还是一个错误?

AppDomain和MarshalByRefObject的生命时间:如何避免RemotingException?

当一个MarshalByRef对象从一个AppDomain(1)传递到另一个(2)时,如果你在第二个AppDomain(2)中调用一个方法之前等待6分钟,你会得到一个RemotingException: System.Runtime.Remoting.RemotingException:Object […]已被断开或在服务器上不存在。 有关这方面的一些文件: http://blogs.microsoft.co.il/blogs/sasha/archive/2008/07/19/appdomains-and-remoting-life-time-service.aspx http://blogs.msdn.com/cbrumme/archive/2003/06/01/51466.aspx – 实例一生,cbrumme说:“我们应该解决这个问题。 🙁 纠正我,如果我错了:如果InitializeLifetimeService返回null,对象只能在AppDomain 2被卸载时收集在AppDomain 1中,即使代理被收集? 有没有一种方法来禁用生命时间,并保持代理(在AppDomain 2)和对象(在AppDomain1)活着,直到代理被定案? 也许与ISponsor …?