Tag: clr

SecurityException:必须将ECall方法打包到系统模块中

我有一个(C#)函数类似于以下内容。 private static bool SpecialCase = false; public void Foo() { if (SpecialCase) { InternalMethod(); return; } Console.WriteLine(); } [MethodImpl(MethodImplOptions.InternalCall)] private static extern void InternalMethod(); 当我在debugging器中使用.NET Framework 4执行此操作时,该方法成功地将空白行打印到控制台并返回。 当我在debugging器外部执行它时,它会抛出一个exception,并显示以下消息: System.Security.SecurityException: ECall methods must be packaged into a system module. 当JIT编译器编译方法而不是调用(if) InternalMethod时,会出现exception。 有什么我能做的(例如属性)告诉CLI要么不抛出SecurityException ,要么延迟exception,直到实际调用方法? 使用案例的附注:使用Microsoft .NET Framework运行时, SpecialCase字段实际上是错误的,而在CLI的另一个(特定)实现下运行时,则为true。 在Microsoft .NET Framework下运行时,对InternalMethod的调用实际上是无法访问的。

在运行时获取当前的.NET CLR版本?

如何在运行的.NET程序中获取当前的CLR运行时版本?

有没有任何.NET CLR / DLR ECMAScript的实现?

有没有人知道ECMAScript的实现(我没有蒸发器)实施的.NET CLR / DLR ? 理想情况下,犀牛是Java的东西。 在.NET Framework / Mono Framework上运行的一个可靠的Rhino端口将是完美的。 我只看到了一些提到的项目,但从来没有见过任何亮相,或者实际上我曾经能够运行脚本的东西。 这就是我已经知道的: MSScriptControl ActiveX控件 :AFAIK,这是微软最后一个真正符合ECMAScript标准的工具(运行JScr​​ipt 5.7)。 我已经与MSScriptControl集成,但不认为COM互操作是这个问题的答案。 x64是这个选项的杀手。 JScript.NET :我不计算JScript.NET,因为它永远不能成功parsing我的真实脚本。 它似乎有closures的麻烦。 托pipeJScript :听起来像我想要的,但似乎是死在水中。 这是DLR的一个主要的示例实施,但是随后与SilverLight纠缠在一起,似乎自2007年以来已经成为优先事项。关于这一情况的可靠来源将是有帮助的。 MyJScript :构build为DLR的教程实现。 任何人都知道这是多么完整的实施? Jint :.NET的JavaScript解释器。 目前还不支持柯里或try – finally 。 .NET的RemObjects脚本 :一个有趣的竞争者仍在工作。 我对他们的市场营销感到困惑,因为这听起来可能最终是合适的。 如果有人知道更多,这也会有所帮助。 V8 for .NET :如果有人将V8移植到.NET,这将会很棒。 据我所知,在这方面也没有太大的努力。 链接是从一个托pipe的C ++包装器调用它的想法。 对于后台,我希望能够从.NET中执行JavaScript; 即将一组脚本加载到上下文中,并调用该上下文并检索执行结果。 目前我通过繁琐的COM Interop跳过使用MSScriptControl。 COM的不一致使得部署和确保一致的执行非常困难。 我希望能够从.NET内部执行相当复杂的JavaScripttesting工具。 这不是用于创build用户macros或简单的小脚本; 我需要一个像Rhino这样的真正的JavaScript环境。 如果实现在CLR(而不是COM)上运行,这对于当前的一些问题确实有帮助。

有没有办法使用win API获取HRESULT值的string表示?

win API中有没有函数可以用来提取HRESULT值的string表示? 问题是不是所有的返回值都logging在MSDN中,例如ExecuteInDefaultAppDomain()函数没有logging为返回“0x80070002 – 系统找不到指定的文件”,但是,它确实! 因此,我想知道是否有一个常用的function。

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

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

在StringBuilder.ToString()的上下文中是什么意思?

stringbuilder.cs的参考源页面在ToString方法中有这个注释: if (chunk.m_ChunkLength > 0) { // Copy these into local variables so that they // are stable even in the presence of —-s (hackers might do this) char[] sourceArray = chunk.m_ChunkChars; int chunkOffset = chunk.m_ChunkOffset; int chunkLength = chunk.m_ChunkLength; 这是什么意思? 恶意用户可能会插入要格式化的string吗?

为什么在.NET中存在空?

为什么.NET中的值可以为null? 这是优于有一个保证,一切都会有一个价值,没有什么呼叫是空的? 任何人都知道这些方法被称为什么? 无论哪种方式,我对此都不是很了解,但是对于所有事情来说,没有任何价值可以让事情变得更简单,就简单性而言,也就是消除空检查,并且能够编写更多简化的algorithm,而无需分支检查。 在performance,简单,平行,面向未来等方面,每种风格有哪些优缺点?

recursiongenericstypes的实例化在它们嵌套的越深处指数地减慢。 为什么?

注:我可能在标题中select了错误的词语; 也许我真的在 这里 谈论多项式增长。 在这个问题的末尾查看基准testing结果。 让我们从这三个代表不可变堆栈的recursiongenerics接口开始: interface IStack<T> { INonEmptyStack<T, IStack<T>> Push(T x); } interface IEmptyStack<T> : IStack<T> { new INonEmptyStack<T, IEmptyStack<T>> Push(T x); } interface INonEmptyStack<T, out TStackBeneath> : IStack<T> where TStackBeneath : IStack<T> { T Top { get; } TStackBeneath Pop(); new INonEmptyStack<T, INonEmptyStack<T, TStackBeneath>> Push(T x); } 我创build了简单的实现EmptyStack<T> , NonEmptyStack<T,TStackBeneath> 。 更新#1:请参阅下面的代码。 […]

为什么不总是调用值types的构造函数

我有一个值types的types构造函数的问题。 这个问题的启发是杰弗里·里希特(Jeffrey Richter)通过C#第3版在CLR中写的东西,他说(在第195页 – 第8章)你永远不应该在值types中实际定义一个types构造函数,因为有时候CLR不会调用它。 所以,例如(实际上是Jeffrey Richters的例子),即使通过查看IL,我也无法解决这个问题,为什么在下面的代码中没有调用types构造函数: internal struct SomeValType { static SomeValType() { Console.WriteLine("This never gets displayed"); } public Int32 _x; } public sealed class Program { static void Main(string[] args) { SomeValType[] a = new SomeValType[10]; a[0]._x = 123; Console.WriteLine(a[0]._x); //Displays 123 } } 所以,为types构造函数应用下面的规则,我不明白为什么上面的值types构造函数根本不被调用。 我可以定义一个静态值types的构造函数来设置types的初始状态。 一个types只能有一个构造函数 – 没有默认构造函数。 types构造函数是隐式私有的 JIT编译器检查这个AppDomain中是否已经执行了types的types构造函数。 如果不是,则会将调用发送到本地代码,否则不会按照它知道该types已被“初始化”。 所以…我只是不能解决为什么我看不到这种types的数组正在构build。 […]

.NET核心中没有AppDomain! 为什么?

微软select不支持.NET Core中的AppDomain是否有很强的理由? 在构build长时间运行的服务器应用程序时,AppDomain特别有用,我们可能希望更新由服务器加载的程序集,而不会closures服务器。 没有AppDomains,我们将如何在长时间运行的服务器进程中replace我们的程序集? AppDomain也为我们提供了一种隔离服务器代码的不同部分的方法。 就像一个自定义websocket服务器可以在主appdomain中有套接字代码,而我们的服务在辅助appdomain中运行。 没有AppDomains,上面的情况是不可能的。 我可以看到一个论点,可能会谈论使用云的虚拟机概念处理程序集更改,而不必承担AppDomains的开销。 但这是微软认为还是说的? 或者他们有上述情况的特定原因和替代scheme?