我有一个在Windows7(64位)上编写的程序,可以在我的计算机上正确编译和运行。但在其他计算机上(特别是在Windows8(64位)上)该程序无法运行。当我尝试运行它时,它说我的程序已停止工作,它崩溃了。我应该补充一点,两台计算机都安装了.Net版本4.5。但是,如果我删除我添加到我的表单中的所有组件(我使用的是VisualStudio2012Express),它运行得很好。但是我必须删除所有组件。只删除其中的一些是行不通的。有人听说过这件事吗? 最佳答案 感谢Hans,我之前没有听说过AppDomain.CurrentDoma
我有一个应用程序域来托管不受信任的代码/程序集。我用安全属性解决了所有安全问题,而且效果很好。不受信任的代码在专用线程上运行。CLR是2.0。这就是我的AppDomainShellAppDomainSeed,Shell在主域中运行,seed是不受信任域中的受信任代理/助手。我有兴趣限制创建新线程和更改优先级。目前,我不受信任的程序集可以设置ThreadPriority.Highest或通过创建10k线程来终止操作系统。有SecurityPermissionFlag.ControlThread但这只会阻止像Abort()这样的高级操作。我正在查看Thread类实现,对于那些简单的操作,它
我有一些在运行时编译的C#代码(我们称它为“脚本”)。它在我用来访问其功能的主程序中使用了一个接口(interface)。编译完成后,我有CompilerResults.CompiledAssembly,在这种情况下,我可以CreateInstance(Type)。一旦我使用完脚本,我想完全卸载。据我了解,如果我创建一个单独的应用程序域,我只能这样做:LoadingDLLsintoaseparateAppDomain我有一些关于我的实现的问题:如果我有多个脚本要编译并想独立卸载它们,我是否必须为每个脚本创建单独的应用程序域?我应该使用哪些应用域名?GUID是个好主意吗?是否有任何我应该
stringinterningonMSDN的性能部分中有一个有用的警告:thememoryallocatedforinternedStringobjectsisnotlikelybereleaseduntilthecommonlanguageruntime(CLR)terminates.但是:CLR什么时候终止? 最佳答案 简单的回答是:CLR在主机(进程)终止时终止。此外,还有一个默认的AppDomain(不可访问)。即使您的AppDomain已卸载,此AppDomain也会继续存在。这就是我认为Tigran所说的系统。
我有一个c#应用程序,它依赖于第三方非托管程序集来访问某些硬件。非托管代码存在内存泄漏,每次访问后内存消耗将增加~10mb。问题是已知的;没有错误修正可用。有没有一种方法可以让我在不定期重启的情况下继续使用这个程序集?我尝试创建一个单独的AppDomain,通过appDomain.CreateInstanceAndUnwrap()将有问题的代码加载到该AppDomain中,然后通过AppDomain.Unload()卸载该域.然而,这显然不会释放该域使用的非托管内存,只会释放托管内存。我还可以将应用程序拆分为两个独立的部分,然后仅重新启动具有非托管dll的部分。然而,这将意味着重大的重
我正在寻找一种将当前应用程序的程序集放入可移植库项目中的方法。在经典库项目中,下面的代码行完成了这项工作:varassemblies=System.AppDomain.CurrentDomain.GetAssemblies();但似乎System.AppDomain不可用于可移植库。有谁知道在可移植库上获取当前域程序集的方法吗? 最佳答案 您可以使用平台Hook:在您的可移植图书馆中:usingSystem.Collections.Generic;namespacePCL{publicinterfaceIAppDomain{ILis
我正在处理一个错误,在该错误中,代码并不总是在应用程序关闭之前执行。该代码位于AppDomain.CurrentDomain.DomainUnload事件的处理程序中。我找到了一个有同样问题的人的帖子,他收到了这个建议“当您的默认应用域发生DomainUnload事件时,您的代码已停止执行。你可能可以做你需要做的事默认AppDomain上的ProcessExit事件。”这对我有用,但我想知道为什么。关于这些事件或它们之间的差异,我没有找到太多信息。我还想知道我是否需要同时订阅两者,或者ProcessExit是否足够。编辑:我想添加更多信息以使其更有用。我忽略了新线程是在它们自己的App
我刚才问过如何限制插件访问(我想阻止它们写入磁盘或网络),我被告知使用AppDomain.我已经搜索并尝试过如何让它工作,但都失败了。任何人都可以提供一些信息以便我可以开始,只需创建一个不允许写入文件或网络的AppDomain。 最佳答案 对于.netframework4.0,请按照this中的以下代码进行操作MSDN文章。以下示例实现了上一节中的过程。在该示例中,VisualStudio解决方案中名为Sandboxer的项目还包含一个名为UntrustedCode的项目,该项目实现了类UntrustedClass。此方案假定您已下
我试图停止我的应用程序锁定我的MEF插件目录中的DLL,以便我可以在运行时覆盖程序集(请注意,我实际上并没有试图让MEF在运行时重新加载它们,在下一个应用程序启动时很好,我只是不想停止应用程序来进行复制)我正在尝试通过为我的mef加载程序集创建影子复制的应用程序域来做到这一点,如下所示:[Serializable]publicclassComposer:IComposer{privatereadonlystring_pluginPath;publicComposer(IConfigurePluginDirectorypluginDirectoryConfig){_pluginPath=
是否可以将lambda表达式作为IL字节流传递给辅助AppDomain,然后使用DynamicMethod将其组装回去以便调用它?一开始我不太确定这是正确的方法,所以这是我问这个问题的(详细)原因...在我的应用程序中,有很多情况需要加载几个程序集进行反射,这样我才能确定接下来要对它们做什么。问题部分是我需要能够在完成反射后卸载程序集。这意味着我需要使用另一个AppDomain加载它们.现在,我的大多数案例都有点相似,只是不完全相似。例如,有时我需要返回一个简单的确认,有时我需要从程序集中序列化资源流,有时我需要进行一两次回调。所以我最终写了同样的半复杂的临时文件AppDomain一遍