Tag: clr

在不同的AppDomain中加载具有依赖项的程序集

我的目标是在两个给定的文件夹之间进行缺少的依赖性检查。 想象一下以下设置。 根\ DIRA \ A.DLL 根\ DIRB \ B.DLL B取决于A. 因此,给定这些文件夹,我想创建一个新的AppDomain,加载B.dll并让DirA(A.dll)的依赖关系自动解析并隔离在新的AppDomain中。 隔离是关键,因为当我卸载这个AppDomain时,我想创建一个新的,可能DirA再次作为依赖,但DirC库需要它,所以在DirC依赖DirB的情况下,我希望它抛出一个例外。 编辑:添加代码示例,以防有助于更好地描述我的问题。 AppDomainSetup setup = new AppDomainSetup(); setup.ApplicationBase = @”C:\Root”; setup.ApplicationName = “Isolated Domain” setup.PrivateBinPath = @”DirA;DirB”; setup.PrivateBinPathProbe = “”;//disable search in AppBase.. var domain = AppDomain.CreateDomain(Guid.NewGuid().ToString(), AppDomain.CurrentDomain.Evidence, setup, AppDomain.CurrentDomain.PermissionSet); //The following statement in theory should pick B.dll’s dependency from DirA. var assembly […]

如果我在C#中的Main方法是私有的,为什么我的程序会工作?

默认情况下,类中每个成员的类型修饰符都是私有的,即使Main()函数类型修饰符是私有的。 CLR如何调用外部世界不可见的主要方法?

F#和C#的CLR相同,那么为什么F#比C#快?

我很困惑,如果你开导我会很感激。 F#使用与C#相同的CLR,并且底层代码是相同的,那么当用F#编写函数时,如何建议函数运行速度比C#快? 如果我只在C#中使用不可变变量并且性能需要尽可能高,那么为什么要使用F#?

引发/生成空引用exception背后的CLR实现是什么?

我们确实遇到过这个特殊问题,也是我们编码/开发生活日或其他日子中最常见的例外情况之一。 我的问题不是 为什么 (我知道当我们尝试访问实际指向null的引用变量的属性时它会引发),但它是关于CLR 如何生成NULL REFERENCE EXCEPTION。 有时我被迫认为用于标识对null的引用的机制(可能null是内存中的保留空间)然后通过CLR引发exception。 CLR如何识别并引发此特定exception。 操作系统在其中起任何作用吗? 我想与大家分享一个最有趣的主张: null实际上是CLR已知的所有时间保留的内存空间,并且禁止所有类型的访问。 因此,当找到该空间的引用时,它默认通过OS生成访问被拒绝的exception类型,CLR将其解释为NULL引用exception。 我没有找到支持上述陈述的任何文章或post,因此很难相信。 可能由于我缺少挖掘细节或其他原因,我希望Stackoverflow是最合适的平台之一,我会得到最好的响应。

.Net CLR如何在内部实现“接口”?

只是好奇.NET CLR如何在内部处理接口? Q1]当CLR遇到类似的情况时会发生什么: 简单的界面示例。 (以下同样使用。) interface ISampleInterface { void SampleMethod(); } class ImplementationClass : ISampleInterface { // Explicit interface member implementation: public void SampleMethod() { // Method implementation. } static void Main() { //Declare an interface instance. ISampleInterface mySampleIntobj = new ImplementationClass(); // (A) // Call the member. mySampleIntobj.SampleMethod(); // Declare an interface instance. ImplementationClass […]

新的C#异步function是否在编译器中严格实现

作为一名C#程序员,他有兴趣探索“如何工作”,我有兴趣了解更多关于使新的异步function工作的过程。 我跟随Eric Lippert关于异步的优秀文章系列: Async博客文章 我不记得在任何地方看到任何对此function的实现的引用(在高级别),除了“编译器正在为我们完成大部分工作”这一事实。 这个function严格来说是编译器function吗? 编译器是否以某种方式重写代码,就是这样? 还是有其他事情,如运行时支持,使这种情况发生?

如何定义“类型”的含义

摘自Eric Lippert关于“是”的含义 的博客 是 : 类型的一个常见概念是类型是值的集合,并且赋值兼容性仅仅是检查给定值是否是必要集合的成员。 但在C#中并非如此。 他给出的计数器示例是null is string返回false ,但string b = null完全没有C#编译器。 也许这是一个愚蠢的问题,但是在C#.Net上下文中定义“类型”概念的更好方法是什么? 它只是用来定义内存占用规则的一个词吗? …到CLR? 我意识到这个定义是多么宽松(而且可怕的错误),但我正在努力适应一个漂亮的包装并绕过类型的想法。 注意:越简单,但完全准确,越好。 (强N型 ,这里)。

C#中的叉概念

由于C#支持线程,有没有办法在C#中实现fork概念? 提前致谢….

调用CLR存储过程

简而言之,在哪里可以找到C#/ VB客户端示例代码,它使用某些argumnet [如sqlxml数据]调用CLR存储过程并接收datareader或其他forms的结果? 另外,我如何定期从通过SQlContext.Pipe.Send()方法发送的正在运行的CLR存储过程中接收信息?

为什么CLR为匿名方法创建新类?

我正在我的项目中使用匿名函数。 直到知道我在想,C#编译器只使用在同一个类中使用匿名方法的代码生成一个方法。 但是,在IL中反编译此代码之后,我看到CLR创建了一个新类。 public class Comparer { public delegate int Greater(int a, int b); public int Great(Greater greater, int a, int b) { return greater(a, b); } } static void Main(string[] args) { int valueOfA = 11, valueOfB = 23, valueOfC = 42; Comparer comparer = new Comparer(); Console.WriteLine(“The greater is \t:{0}”, comparer.Great(delegate(int a, int […]