问题标签 [clr-hosting]
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.
.net - 什么是 CLR 托管?
什么是 CLR 托管?那有什么用例?
c++ - Azure 和本机代码
看起来您可以在 Azure 上托管本机代码:http: //msdn.microsoft.com/en-us/library/dd573362.aspx。是否可以在这里运行套接字服务器(监听 tcp/udp)?甚至在顶部托管 CLR?
wpf - 由于 stackoverflow 错误,无法在 Clr 4.0 自托管应用程序中创建 WPF UserControl
我设法在 Delphi win32 应用程序中托管 CLR 2.0,该应用程序能够在 Delphi 控件中创建和托管 WPF 控件,类似于 WinForms 应用程序的 ElementHost。
现在,我想将我的解决方案移至 CLR 4.0 并且一切正常,除非我尝试创建具有关联 Xaml 资源的 UserControl。在这种情况下,它会导致堆栈溢出错误,从而强制进程退出!但是,如果我通过代码(不阅读 xaml)创建一些 WPF 控件,那么一切正常!
我设法进入了框架代码,直到我进入了XamlReader.LoadBaml方法,该方法在执行以下代码后就崩溃了:
请注意,加载的程序集也使用 CLR4。
谢谢你的帮助,
摩根
c# - 将 .NET 程序集引用解析为不同的名称?
我的项目引用Library1.dll和Library2.dll。 Library2.dll依赖于Library1.dll,但它被编译为使用不同的名称Library1.Net40.dll引用它。
有没有一种好方法告诉我的应用程序重定向 Library1.Net40.dll 的所有引用以解析为Library1.dll?也许类似于使用 <bindingRedirect> 重定向版本的方式?
我有一个处理AppDomain.AssemblyResolve事件的解决方案,但它有点小技巧,我希望有更好的方法来做到这一点。
编辑:供任何人参考,这就是我最终使用AppDomain.AssemblyResolve 事件重定向到不同程序集的解决方法。
.net - 如何判断 XP 上正在运行的应用程序加载了哪个版本的 .NET CLR?
我知道电脑上的 explorer.exe 加载了托管的 shell 扩展。我想知道将哪个版本的 CLR 加载到 explorer.exe。如果我运行的是 Vista 或 Win7,我可以使用Process Explorer并查看 explorer.exe 属性的 .NET Assemblies 选项卡。但是,这不适用于 XP。有没有办法在 XP 上获取此信息?
.net - 如何限制特定类可以分配的内存?
我在运行时将几个外部程序集加载到我的应用程序中。而且我需要限制每个外部程序集中定义的特定类可以使用的内存量,例如,每个实例 10 mb,否则我们会得到 OutOfMemory。
我已经用谷歌搜索了执行此操作的最佳方法,并找到了一些有关CLR Runtime Hosting的信息。这似乎是我需要的东西,但我找不到任何好的例子。
任何人都可以分享代码示例或一些关于使用 CLR 运行时托管的内存管理的链接吗?或者也许有一些更好的解决方案来限制每个类的内存量?
提前致谢。
c# - 创建具有完全信任权限(包括网络权限)的托管 CLR AppDomain
我需要在非托管进程中托管 .NET 运行时。我有可以通过 COM 加载运行时的代码,我可以将程序集加载到 AppDomain 中并很好地执行代码。
但是,我遇到了托管在网络共享上的应用程序的问题,并且必须更改应用程序策略才能让它们执行,这不是一个选项。所以我想做的是将运行时的主 AppDomain 的权限级别设置为不受限制。
有人可以提供有关如何设置 AppDomain 策略级别的示例吗?我不太清楚如何从非托管代码中实例化所需的类以创建 PolicyLevel 和相关对象并设置策略。基本上我不知道我需要什么包含/命名空间引用才能从我使用的 C++ 代码中工作。
这是我此时的代码:
我选择了一些示例代码(已注释),这些代码似乎可以满足我的需要,但我无法弄清楚我需要哪些 lib/include 引用才能使 PermissionSet 和 PolicyLevel 的类型引用工作。
任何想法都非常感谢...
.net - CLR 在非 CLR 创建的线程中托管异常处理
问题:
从非托管代码进入CLR的线程中的未处理异常不会触发“正常”未处理异常 CLR 处理。
CSSimpleObject.GetstringLength()
在下面从 C++调用的代码中
- "1" 在调用线程(非 CLR 创建的线程)中引发异常,
- “2”在 new Thread()(CLR 创建的线程)中引发异常。
在“1”的情况下
- CurrentDomain_UnhandledException() 永远不会被调用。
- 应用程序域和进程将保持加载和运行,您只会得到一个 FAILED。
情况“2”(预期行为)
- CurrentDomain_UnhandledException() 被调用。
- 进程被杀死。
问题:
必须做什么才能获得“正常”行为?
示例代码:
下面的代码基于“所有互操作和融合示例”中的 Visual Studio 2010“ CppHostCLR ”代码示例。
运行时主机(C++):
托管代码(C#):
迄今为止的研究:
MSDN 最初暗示非 CLR 创建的线程中未处理的异常应该或多或少“自然”地表现 - 请参阅“托管线程中的异常”
公共语言运行时允许线程中大多数未处理的异常自然地进行。在大多数情况下,这意味着未处理的异常会导致应用程序终止。”
“大多数”意味着在 CLR 创建的内部线程中,线程中止和应用程序域卸载异常的处理方式不同。在非 CLR 线程中
“他们正常进行,导致申请终止。”
进一步的研究使我找到了“ CLR 中未处理的异常处理”,在那里我发现了以下内容:
“如果未处理异常......在托管方法中,异常将退出 CLR 但继续作为本机 SEH 异常向上传播(托管异常表示为本机 SEH 异常)......操作系统未处理的异常过滤器(UEF)机制可能并不总是触发CLR的未处理异常处理。正常情况下,这会按预期工作,并且会触发CLR的未处理异常处理。但是,在某些情况下,这可能不会发生。
上面的代码有什么问题或者如何更改它以触发 CLR 的未处理异常处理?
更新(2011-05-31):
我刚刚发现了一个旧的错误报告,“当从非托管调用托管代码并引发异常时,未调用 UnhandledExceptionEventHandler - http://tinyurl.com/44j6gvu ”,Microsoft 确认这是一个“错误”行为:
感谢您花时间报告此问题。该行为确实是由 CLR 执行引擎和 CRT 竞争 UnhandledExceptionFilter 引起的错误。CLR 的架构在 4.0 版本中进行了修改,支持这种场景。
更新(2011-06-06):
为什么正确地做到这一点很重要?
- 如果您正在创建一个托管环境,您的开发人员希望在异常处理中具有一致的行为
- 除非有办法在本机线程中触发“正常 CLR 异常处理”,否则这意味着您始终必须将执行转移到托管线程(例如在线程池中排队)
- 仍然有一小部分代码将执行从本机线程转移到托管线程......必须捕获所有异常并以不同的方式处理这种情况
注意:通过更改 CLR 行为SetActionOnFailure()
会使事情变得更糟,因为它最终会掩盖原始异常(即,您最终会看到 threadAborts 而不是内存不足 - 不知道原始错误来自何处)!
com - 如何将 .tlb 文件转换为头文件和实现文件?
我正在尝试转换 mscorlib.tlb。它通常在 C++ 中这样使用:
如何将其转换为头文件和实现文件?
我能够使用 Visual Studio 编译一个包含上述行的虚拟 cpp 文件,并生成一个 .tlh 文件。不应该还有实现文件吗?
c++ - CLR4 托管接口导致堆损坏?
我正在使用本机 CLR 托管几个星期。一开始它工作得很好。但后来我注意到我的应用程序中的某些东西会导致堆损坏。我发现这是由 CLR 启动引起的。(请参阅以下代码的简短版本。)
关于如何避免这种情况的任何想法?目前在某些情况下它仍然有效,但随着我的应用程序变得越来越大,出错的机会成倍增加。