问题标签 [appdomain]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
24255 浏览

c# - C#中AppDomain的使用

C# 中 AppDomain 最重要的用途是什么?

0 投票
3 回答
4267 浏览

c# - AppDomain.CreateInstance

当我们使用 AppDomain.CreateInstance("Assembly name", Type name) 并且我的类继承自 MarshalByRefObject 时,内部会发生什么?它是创建一个 TransparetnProxy 吗?

代码:

传入 args[0] = Greet

0 投票
3 回答
1508 浏览

c# - 使用 AppDomain 实例化 DLL 中的类

我有一个网站,可以根据用户需求即时编译一个类并将 dll(名为 Equation.dll)存放在网站的子目录中。管理员可以随时重新编译。但是,一旦创建了类的实例,就会显示消息“该进程无法访问该文件,因为它正被另一个进程使用”。

据我了解,解决此问题的唯一方法是从不同的 AppDomain 创建实例。下次管理员需要重新编译时,我需要卸载这个 AppDomain 并且(我认为)一切都会好起来的。(也许我的假设是错误的?)

坦率地说,我无法创建此类的实例来挽救我的生命。诚然,我在这里有点不知所措......所以我在任何事情上都在摇摆不定。此时我的片段是:

“equationcache”文件夹是 dll 被编译到的位置(尽管我为了好玩而尝试将它放在“bin”中,但也没有成功)。调用中的程序集名称似乎是正确的(并且它适用于 appDomain.Load)。调用中的类型名称似乎是正确的。根据日志,会发生以下情况:

我不明白为什么它在“equationcache”目录中寻找不同形式的“Cnn.CostModel”。诚然,调用代码位于 bin 文件夹中的“Cnn.CostModel.dll”中。我需要做什么才能获取“Equation.dll”文件?

还是我完全偏离了这项努力?非常沮丧。任何帮助将不胜感激。

0 投票
3 回答
883 浏览

asp.net - 加速 ASP.NET 开发

我们正在开发使用 DotNetNuke 作为框架的 Web 应用程序,并使用我们的自定义模块来实现所需的功能。问题是,当您对代码进行任何更改时,加载网站需要很长时间。我每次重新启动最多需要 1 分钟,这真的很慢。这导致非常缓慢的开发-重建-测试周期。

我们正在使用控制台项目和 winforms 项目作为新功能的测试平台,以加快开发速度,但仍有许多 UI 功能必须通过浏览器完成。

是否有人对如何加快/防止在 Web 应用程序的 bin 文件夹中发生更改时发生的 appdomain 重启有任何提示?

0 投票
2 回答
731 浏览

com - .Net COM DLL 不能跨 appdomains 从 vb6 工作

我们有一个大型的 vb6 应用程序,由于我们需要更改/修复一些东西,我们正在将部分移动到 .net,以框架 2.0 为目标。我们已经将一堆类移动到 .net dll 中,并且它们已正确设置以暴露给 com。

这就是问题所在:MainAppVB6.exe 实例化了 DOTNET_COM.ComClass。它将这个传递给不同的.net dll 中的一个方法,该方法将它传递给一个appdomain。对于用 vb6 编写的 COM 对象,这根本不是问题。

.net 查看 appdomain 边界,并希望对象可序列化或 marshalbyref。由于我们需要 .net 部分来更改返回到 vb6 的数据,因此可序列化不起作用。如果我们在 Inherits MarshalByRefObject 标记类,那么我们会得到“这个远程代理没有通道接收器,这意味着服务器没有注册的服务器通道正在监听,或者应用程序没有合适的客户端通道与服务器通信”。

没有渠道——我们只是在同一个 dll 中跨过一个 appdomain。.net 似乎没有将对象视为 COM,它应该这样做。

如果我同时删除 marshalbyref 和可序列化,则只有当 com 对象由 vb6 实例化时才会起作用。如果 appdomain 中的 .net 功能创建对象并分配给以传递回 vb6,则 vb6 会给我自动化错误。

一个非常丑陋的事情是序列化新appdomain中的对象,发回xml,然后让vb6反序列化,但这看起来很荒谬。

有人有想法么?

谢谢你。

赛斯

0 投票
5 回答
979 浏览

c# - 每个 C# 程序都有一个 AppDomain 吗?

即使我们没有专门创建 AppDomain,是否每个 C# 程序都有一个 AppDomain?为什么需要它?如果我们不将第三方程序集加载到单独的 AppDomain 中,我已经阅读了有关第三方程序集会使整个应用程序崩溃的信息。我没有很好地理解这一点。任何人都可以解释这一点。

0 投票
4 回答
2955 浏览

c# - 如何在 .net 中的另一台计算机上运行进程

假设我有一个名为“MyService”的 Windows 服务和一个名为“MyEXE”的可执行文件,位于我网络上的几台计算机上。

是否可以(从“MyService”中)在不同/同一台计算机上启动多个“MyEXE”实例,让它执行一些任务并将真/假结果返回给“MyService”中的回调方法?

像这样的东西

也许我弄错了整个架构!

0 投票
3 回答
1678 浏览

.net-2.0 - 我什么时候使用 AppDomain?

我对反射很陌生,我想知道我会使用(第二个)AppDomain 做什么?在业务应用程序中会有什么实际应用程序?

0 投票
1 回答
641 浏览

c# - 用于将 POCO 实例公开给其他 AppDomain 的通用容器 - 它是如何工作的?

我对另一个 SO 线程的这个答案很感兴趣,我希望有人可以帮助我阐明这个概念。

假设我有一个主 AppDomain 和一堆由主 AppDomain 创建和初始化的子 AppDomain。在伪代码中:

主要应用程序域:

子应用域:

在 Init() 期间,子 AppDomain 实例化一个 POCO 对象,根据定义,该对象是不可编组的。我们还假设我们不能在这方面修改它。

链接的答案表明,将它包装在一个Container<T>(它本身是可编组的)中应该允许它被传递回主 AppDomain。我理解这一点,因为它Container<MyInfo>是真正被传递的实例的代理。

我不明白的是主 AppDomain 怎么可能通过容器的代理访问容器中的 POCO 实例。我看到了重载的隐式转换运算符Container<T>,我知道它返回包含的 POCO 实例。但是该实例本身并没有被代理 - 它仍然在子 AppDomain 中!那么,这不应该中断吗?

这里到底发生了什么?

0 投票
3 回答
1455 浏览

c# - 我可以告诉 CLR 通过引用在 AppDomains 之间编组不可变对象吗?

在 .NET 中的 AppDomain 之间编组对象时,CLR 将序列化对象(如果它具有Serializable属性)或生成代理(如果它继承自MarshalByRef

但是,对于字符串,CLR 只会将对字符串对象的引用传递到新的 AppDomain。CLR 仍然确保完整性,因为 .NET 字符串是不可变的,并且第二个 AppDomain 对字符串的任何更改都不会影响原始对象。

这让我想到了我的问题:有没有办法告诉 CLR 我的自定义类型是不可变的,当用于远程处理时,它应该像处理字符串类一样传递对对象的引用?