问题标签 [applicationdomain]
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.
apache-flex - Flex SWF 资源在运行时在同一个 ApplicationDomain 中加载到 Flash SWF
我正在尝试将 Flex SDK 编译的 swf 加载到 Flash IDE 导出的 swf 中,并通过 getDefinition() 实例化资产。通常,这适用于从 Flash IDE 导出的资源,然后也从 Flash IDE 加载到另一个 swf。
这就是我通常只能使用 Flash IDE 执行此操作的方式:
Loader -> Using same ApplicationDomain -> getDefinition(class)
现在,使用[Embed] 元数据标记从 Flex SDK 编译的“ Test
.as”:
Loader -> Using same ApplicationDomain -> getDefinition(" Test _" + class)
问题是我宁愿不必跟踪加载的资产库来为我想获得的类名添加前缀((' Test _“+类)vs(类))。有没有办法做到这一点在不引用库的情况下从库中提取类或不访问原始加载器?这样我不需要知道资产来自哪个 swf,只需要知道我可以从当前 ApplicaitonDomain 实例化的类名。
谢谢
apache-flex - 在 module1 中加载一个与 module2 中的类同名的类
我有一个可以根据需要加载模块的 Flex 应用程序。当第一个模块被加载时,它会创建一个 MyBackground() 类,它将背景涂成红色。当我选择加载第二个模块(并卸载第一个模块)时,我再次加载一个 MyBackground 类(来自第二个模块)。但是,当我进入 MyBackground 的构造函数时,它会直接进入 UIComponentDescriptor 的构造函数:
这与为我加载的每个模块使用相同的应用程序域有关吗?Flex 是否将类类型加载到父应用程序中并缓存它们,所以当我第二次请求一个类时,它只是进行查找,而不实际查看该类是否相同?
任何有关此的信息表示赞赏。
.net - 什么是 .NET 应用程序域?
究竟什么是应用程序域 (AppDomain),它与进程或线程有何不同?
c# - 为什么调用 AppDomain.Unload 不会导致垃圾回收?
当我执行 AppDomain.Unload(myDomain) 时,我希望它也会进行完整的垃圾收集。
根据 Jeffrey Richter 在“CLR via C#”中的说法,他在 AppDomain.Unload 中说:
CLR 强制进行垃圾回收,回收由现在已卸载的 AppDomain 创建的任何对象使用的内存。调用这些对象的 Finalize 方法,使对象有机会正确清理自己。
根据“自定义 .NET Framework 公共语言运行时”中的“Steven Pratschner”:
在所有终结器都运行并且没有更多线程在域中执行之后,CLR 准备好卸载内部实现中使用的所有内存数据结构。然而,在此之前,必须收集驻留在域中的对象。在下一次垃圾回收发生后,应用程序域数据结构从进程地址空间中卸载,并且该域被认为已卸载。
我误解了他们的话吗?我做了以下解决方案来重现意外行为(在 .net 2.0 sp2 中):
一个名为“Interfaces”的类库项目包含此接口:
一个名为“ClassLibrary1”的类库项目,它引用“Interfaces”并包含此类:
一个控制台应用程序项目,它引用“接口”项目并执行以下逻辑:
运行控制台应用程序时的输出是:
注意事项:
每个进程完成垃圾收集(只是复习)
被卸载的应用程序域中的对象调用了终结器,但没有完成垃圾收集。由 AllocateMemory() 创建的 10 兆字节对象只会在上面示例中执行显式 GC.Collect() 之后才会被收集(或者如果垃圾收集器会在稍后的某个时间。
其他注意事项: XmlClass 是否可以终结并不重要。在上面的示例中也发生了相同的行为。
问题:
为什么调用 AppDomain.Unload 不会导致垃圾回收?有什么方法可以使该调用导致垃圾收集?
在 AllocateMemory() 中,我计划加载将进入 LargeObject 堆并将成为第 2 代对象的短期大型 xml 文档(小于或等于 16 mb)。有没有办法在不使用显式 GC.Collect() 或其他类型的垃圾收集器显式编程控制的情况下收集内存?
c# - 如何在新的 AppDomain 中运行 WPF 应用程序?ExecuteAssembly 失败
我正在尝试使用应用程序域从控制台应用程序启动 WPF 应用程序,但是当我这样做时,我收到了意外错误。
独立运行 WPF 应用程序,工作正常。
此代码也有效:
但是此代码失败并出现以下错误。错误似乎在构造函数中,它是空的:
堆栈跟踪:
我想我做错了什么,但不明白它是什么。谢谢你的帮助。
actionscript-3 - Actionscript 3 加载外部 swf 转换问题
我在尝试在 actionscript 3.0 中加载外部定义的类时遇到了一些问题。我相信这是我对 ApplicationDomain / LoaderContext 类的理解的一个问题,但即使在浏览了文档和几个网络搜索之后,我仍然被卡住了。
基本上我想要做的是加载一个包含符号的 swf,该符号是调用 swf 和加载的 swf 之间共享的接口的实现。我可以很好地加载 swf 并在其上实例化和执行方法,但前提是我不尝试将其强制转换为共享接口类型。如果我确实尝试强制转换它,我会收到 TypeError: Error #1034: Type Coercion failed: type error。
我怀疑这是因为当我加载新类时,闪存将其识别为完全不同的类,因此出现异常。文档建议使用 LoaderContext 参数,将 applicationDomain 设置为 ApplicationDomain.currentDomain 。
问题是这没有效果。无论我将 ApplicationDomain 设置为 currentDomain、null 还是当前域的子域,我仍然会收到类型强制失败错误。错误的 :: 部分似乎表明我加载的类位于不同的命名空间或类似的命名空间中,而我希望它与我的加载器位于相同的命名空间中。
代码:
接口声明:
接口实现
.net - 应用程序全局错误记录器
在处理异常处理不佳的 vb.net 应用程序时。这是一个很大的痛苦。所以一个想法闪过,如果有可能生成一个库或服务或某种 exe,它将记录应用程序的所有错误,而无需在主机应用程序的某个全局位置编写一行代码/最少的代码。我知道这听起来有点疯狂,但 Windows 事件记录器也是如此。所以我也是这么想的。让我让我更清楚。假设我有一个应用程序 abc.exe,没有一次尝试捕获。我在使用该应用程序时面临很多错误。现在,我不想深入研究应用程序源代码,而是想编写另一个应用程序,该应用程序将运行并记录该应用程序的所有未处理异常,包括托管和 com。
所以请大师们帮助我。我知道 ApplicationDomain 很有用。我在 MSDN 博客上遇到了一个叫 Rick 的人或类似的东西,但我没有再抓到了。因此,一些简单的源代码或部分代码会有所帮助。请在您的答案中添加一些示例代码。
这将是一个很大的帮助。
概括
我想要一个将自己注入到任何应用程序中的应用程序,其中放置了 Injector 的程序集。也就是说,如果我有一个应用程序 D:\xyz\myapp\abc.exe ,如果说我将应用程序作为 exe ,那么如果将它放在 myapp 文件夹中,然后在执行 abc.exe 之后,我的错误记录器应用程序将开始工作并将自身注入当前的应用程序域。如果我将它创建为服务,还告诉我它是否会成为多线程。
flash - ApplicationDomain.domainMemory 有什么用?
在 AS3 中,有什么ApplicationDomain.domainMemory
用?
.net - How should I load assemblies across the application domain boundary to load and unload modules?
I'm aware of the limitations of loading an assembly dynamically during run-time that prevents it from being unloaded. Instead it's been suggested that, if this is a requirement, that I should instead load modules in other application domains and then execute code across the domain boundries.
How can I ease this development process and work with this scenario? What tools or frameworks are available?
apache-flex - How do you specify ApplicationDomain.currentDomain when loading via SWFLoader?
I'm using Flex Builder 3 to build what will be a fairly large project. I'm suffering from modules stepping on each other and a conflict between application/module. My structure looks something like the following:
Main Application |--Application 2 |--Application 3 |--Application 3
(Application 2 is a child of the main application, while Applications 2 and 3 are siblings, children of Application 2)
In reality, it's more complicated than that, but this is where problems start. In the end, I could have the tree four or possibly five levels deep... If it can be made to work. The main application file consists of little more than a canvas and a series of buttons. The second application contains a vertical tab navigator with canvases as containers, a list and a tree view within two of the tabs. Application 3 is very complicated, as is an event calendar in Application 4. As long as no interaction takes place, everything loads and appears fine. When looking at Modules 2 and 3, both have ComboBoxes. The first to be accessed works correctly, but the second throws errors, what I take to be sandbox violations. I converted Applications 2, 3 and 4 to Modules and used ModuleLoader to bring them in and to specify ApplicationDomain=currentDomain. Now, the calendar functions in the last (now module) fails to display at all. I can trace values and throw up Alert boxes so I know that it's at least loading, but nothing displays. As a test, I stripped that module down to contain nothing at all but a Label that says "Test" and it displays fine, but as soon as I put it inside a Canvas component, nothing displays. But if I convert that module back to an Application and load it using an SWFLoader, it displays fine, but I'm certain that as soon as I try to bring in another application parallel to it, I'm going to be back where I Started. I can easily use so.data and LocalConnections to pass information back and forth, but how do I load an SWF in as an Application and specify an application domain? It would be nice to have everything exist as currentDomain and play nice.