问题标签 [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.

0 投票
3 回答
12415 浏览

.net - 什么是 CLR 托管?

什么是 CLR 托管?那有什么用例?

0 投票
1 回答
842 浏览

c++ - Azure 和本机代码

看起来您可以在 Azure 上托管本机代码:http: //msdn.microsoft.com/en-us/library/dd573362.aspx。是否可以在这里运行套接字服务器(监听 tcp/udp)?甚至在顶部托管 CLR?

0 投票
1 回答
240 浏览

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。

谢谢你的帮助,

摩根

0 投票
2 回答
5031 浏览

c# - 将 .NET 程序集引用解析为不同的名称?

我的项目引用Library1.dllLibrary2.dllLibrary2.dll依赖于Library1.dll,但它被编译为使用不同的名称Library1.Net40.dll引用它。

有没有一种好方法告诉我的应用程序重定向 Library1.Net40.dll 的所有引用解析为Library1.dll?也许类似于使用 <bindingRedirect> 重定向版本的方式?

我有一个处理AppDomain.AssemblyResolve事件的解决方案,但它有点小技巧,我希望有更好的方法来做到这一点。

编辑:供任何人参考,这就是我最终使用AppDomain.AssemblyResolve 事件重定向到不同程序集的解决方法。

0 投票
2 回答
4724 浏览

.net - 如何判断 XP 上正在运行的应用程序加载了哪个版本的 .NET CLR?

我知道电脑上的 explorer.exe 加载了托管的 shell 扩展。我想知道将哪个版本的 CLR 加载到 explorer.exe。如果我运行的是 Vista 或 Win7,我可以使用Process Explorer并查看 explorer.exe 属性的 .NET Assemblies 选项卡。但是,这不适用于 XP。有没有办法在 XP 上获取此信息?

0 投票
2 回答
847 浏览

.net - 如何限制特定类可以分配的内存?

我在运行时将几个外部程序集加载到我的应用程序中。而且我需要限制每个外部程序集中定义的特定类可以使用的内存量,例如,每个实例 10 mb,否则我们会得到 OutOfMemory。

我已经用谷歌搜索了执行此操作的最佳方法,并找到了一些有关CLR Runtime Hosting的信息。这似乎是我需要的东西,但我找不到任何好的例子。

任何人都可以分享代码示例或一些关于使用 CLR 运行时托管的内存管理的链接吗?或者也许有一些更好的解决方案来限制每个类的内存量?

提前致谢。

0 投票
1 回答
1735 浏览

c# - 创建具有完全信任权限(包括网络权限)的托管 CLR AppDomain

我需要在非托管进程中托管 .NET 运行时。我有可以通过 COM 加载运行时的代码,我可以将程序集加载到 AppDomain 中并很好地执行代码。

但是,我遇到了托管在网络共享上的应用程序的问题,并且必须更改应用程序策略才能让它们执行,这不是一个选项。所以我想做的是将运行时的主 AppDomain 的权限级别设置为不受限制。

有人可以提供有关如何设置 AppDomain 策略级别的示例吗?我不太清楚如何从非托管代码中实例化所需的类以创建 PolicyLevel 和相关对象并设置策略。基本上我不知道我需要什么包含/命名空间引用才能从我使用的 C++ 代码中工作。

这是我此时的代码:

我选择了一些示例代码(已注释),这些代码似乎可以满足我的需要,但我无法弄清楚我需要哪些 lib/include 引用才能使 PermissionSet 和 PolicyLevel 的类型引用工作。

任何想法都非常感谢...

0 投票
1 回答
2223 浏览

.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 而不是内存不足 - 不知道原始错误来自何处)!

0 投票
1 回答
8706 浏览

com - 如何将 .tlb 文件转换为头文件和实现文件?

我正在尝试转换 mscorlib.tlb。它通常在 C++ 中这样使用:

如何将其转换为头文件和实现文件?

我能够使用 Visual Studio 编译一个包含上述行的虚拟 cpp 文件,并生成一个 .tlh 文件。不应该还有实现文件吗?

0 投票
1 回答
289 浏览

c++ - CLR4 托管接口导致堆损坏?

我正在使用本机 CLR 托管几个星期。一开始它工作得很好。但后来我注意到我的应用程序中的某些东西会导致堆损坏。我发现这是由 CLR 启动引起的。(请参阅以下代码的简短版本。)

Rational Purify 异常

关于如何避免这种情况的任何想法?目前在某些情况下它仍然有效,但随着我的应用程序变得越来越大,出错的机会成倍增加。