问题标签 [clr]

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 回答
8522 浏览

c# - C# 不支持静态索引器吗?

我一直在尝试几种不同的方法,但我得出的结论是无法做到。这是我过去从其他语言中喜欢的语言功能。这只是我应该注销的东西吗?

0 投票
10 回答
6673 浏览

.net - Silverlight 内存分析器是否存在?

CLR 探查器似乎不适用于 Silverlight CLR。是否存在另一个内存分析器?

0 投票
3 回答
514 浏览

c# - ASPX 页面编译失败

我们正在开发一个基于 Web 的应用程序,允许管理员上传插件。所有插件都存储在应用根目录之外的特殊文件夹中(例如 C:\Plugins),并通过 Assembly.LoadFrom() 动态加载。这在大多数情况下都可以正常工作:插件中的 WebControls 被实例化和加载,自定义类按预期运行,等等。

我们使用自定义 VirtualPathProvider 从这些插件中获取资源。因此,要获得嵌入式 ASPX 文件,您只需执行“/MySite/embeddedResource/?Assembly=MyPlugin&Resource=MyPage.aspx”。这也很好用:嵌入的 ASPX 文件可以像普通页面一样编译和提供。

但是,当嵌入的 .aspx 文件(在动态加载的插件内部)引用同一插件程序集中的类时,就会出现问题。我们会收到诸如“找不到类型或程序集 MyPlugin”之类的编译错误。这很奇怪,因为很明显,它将 .aspx 文件从 MyPlugin 中拉出。那怎么找不到呢?

所以,我希望你能帮我解决这个问题。该插件看起来像这样:

MyPlugin.dll:

  • InternalHelperClass.cs
  • MyPage.aspx(没有 .cs 文件的资源)

当 MyPage.aspx 包含类似“<%= InternalHelperClass.WriteHelloWorld() %>”的内容时,编译失败。

我们怎样才能让它发挥作用?

更新:

我们已经尝试使用完全限定名称。没有不同。无法单步执行 - 当您转到 aspx 页面时,这是一个编译错误。在这种情况下,命名空间不会成为问题(因为它来自外部插件 dll)

更新2:

乔尔,我认为你在做某事。不幸的是,编辑 web.config 以包含这些程序集并不是设计的一部分。基本上,我们希望插件是完全动态的——将它们放在一个文件夹中,重新启动应用程序,然后就可以使用了。

0 投票
2 回答
1473 浏览

garbage-collection - 设置服务器或工作站 GC

如何配置应用程序,甚至整台机器,以使用 CLR 垃圾收集的服务器或工作站风格?

0 投票
3 回答
1876 浏览

c# - 如何获取我的应用程序创建的应用程序域列表?

我有一个服务应用程序,它在用于长时间运行的任务的过程中创建 AppDomain。我一直在通过将它们存储在具有唯一 ID 的哈希表中来跟踪它们。

任务完成后,服务应用程序会卸载分配给该任务的 AppDomain,然后将其从 appdomain 哈希表中删除。

纯粹从完整性检查的角度来看,有没有一种方法可以查询 CLR 以查看创建应用程序域仍加载哪些应用程序域(即,我可以将跟踪 Hashtable 与 CLR 实际看到的内容进行比较)?

0 投票
2 回答
995 浏览

.net - .NET 内存管理在托管代码中是否比在本机代码中更快?

我原以为托管代码中的内存分配是否比本机代码中的更快是明确的 -但似乎存在一些争议。由于没有对操作系统的上下文交换调用,虚拟机下的内存管理可能会更快,但后来我看到虚拟机本身需要定期调用操作系统以获得更多内存,并且它具有内存本身的管理开销而不是操作系统。

与其像我一样做出未经证实的断言,请提供指向支持您立场的参考资料的链接。

0 投票
6 回答
1104 浏览

c++ - C++ CLI 是 C++ 的超集吗?

C++ CLI编译器是否能够在不修改的情况下编译一些大型 C++ 类集?

C++ CLI 是 C++ 的超集吗?

0 投票
3 回答
23750 浏览

sql-server - SQL Server - 使用 CLR 集成来使用 Web 服务

Web 上有一些教程描述了使用 SQL Server 2005 的 CLR 集成来使用 Web 服务。大多数情况下,这个过程似乎相当复杂。我遇到了几个问题,包括需要更改数据库的信任级别,以及使用 sgen 工具创建静态 XmlSerializer 程序集;而且我还没有让它正常工作......(我确定我只需要投入更多的时间和精力)

采用这种类型的架构时,安全性、性能和维护方面的影响是什么?这可能是一个相当频繁使用的过程,并且易于维护是相对重要的。

我可以自由选择是将它作为 UDF 集成到 SQL Server 中,还是让它成为控制台/Web 应用程序的独立 .NET 库。SQL CLR 与外部程序集的集成值得麻烦吗?

0 投票
2 回答
13488 浏览

.net - .NET 中类加载器的等价物

有谁知道是否可以在.NET 中定义等效于“java 自定义类加载器”的内容?

提供一点背景:

我正在开发一种针对 CLR 的新编程语言,称为“Liberty”。该语言的特点之一是它能够定义“类型构造函数”,这是由编译器在编译时执行并生成类型作为输出的方法。它们是泛型的一种概括(该语言中确实有普通的泛型),并允许编写这样的代码(以“Liberty”语法):

“元组”的定义如下:

在这个特定的示例中,类型构造函数tuple提供了类似于 VB 和 C# 中的匿名类型的东西。

但是,与匿名类型不同,“元组”具有名称并且可以在公共方法签名中使用。

这意味着我需要一种方法,让最终由编译器发出的类型可以跨多个程序集共享。例如,我想要

tuple<x as int>在程序集 A 中定义的类型最终与tuple<x as int>程序集 B 中定义的类型相同。

当然,这样做的问题是程序集 A 和程序集 B 将在不同的时间编译,这意味着它们最终都会发出自己不兼容的元组类型版本。

我研究了使用某种“类型擦除”来做到这一点,这样我就可以拥有一个包含一堆这样的类型的共享库(这是“Liberty”语法):

然后将访问从 i、j 和 k 元组字段重定向到Field1Field2Field3.

然而,这并不是一个真正可行的选择。这意味着在编译时tuple<x as int>最终tuple<y as int>会成为不同的类型,而在运行时它们将被视为相同的类型。这会给诸如平等和类型标识之类的事情带来很多问题。这对我的口味来说太抽象了。

其他可能的选择是使用“状态包对象”。但是,使用状态包会破坏语言中支持“类型构造函数”的全部目的。想法是启用“自定义语言扩展”以在编译时生成新类型,编译器可以使用这些新类型进行静态类型检查。

在 Java 中,这可以使用自定义类加载器来完成。基本上可以发出使用元组类型的代码,而无需在磁盘上实际定义类型。然后可以定义一个自定义的“类加载器”,它将在运行时动态生成元组类型。这将允许在编译器内部进行静态类型检查,并将跨编译边界统一元组类型。

然而不幸的是,CLR 不提供对自定义类加载的支持。CLR 中的所有加载都是在程序集级别完成的。可以为每个“构造类型”定义一个单独的程序集,但这会很快导致性能问题(有许多只有一种类型的程序集会使用太多资源)。

所以,我想知道的是:

是否可以在 .NET 中模拟 Java 类加载器之类的东西,我可以在其中发出对不存在类型的引用,然后在需要使用它的代码运行之前在运行时动态生成对该类型的引用?

笔记:

*我实际上已经知道这个问题的答案,我在下面提供了答案。然而,我花了大约 3 天的时间进行研究,并进行了大量的 IL 黑客攻击,以便提出解决方案。我认为在这里记录它是一个好主意,以防其他人遇到同样的问题。*

0 投票
6 回答
19114 浏览

c# - C#/CLI 标识符的最大长度是多少?

名称还有哪些其他限制(除了范围内明显的唯一性)?

那些定义在哪里?