我试图IDynamicMetaObjectProvider在深度中给出第二版C#的简短例子,我遇到了问题.
我希望能够表达一个无效的电话,而我却失败了.我确信这是可能的,因为如果我使用反射活页夹动态调用void方法,一切都很好.这是一个简短而完整的例子:
using System;
using System.Dynamic;
using System.Linq.Expressions;
class DynamicDemo : IDynamicMetaObjectProvider
{
public DynamicMetaObject GetMetaObject(Expression expression)
{
return new MetaDemo(expression, this);
}
public void TestMethod(string name)
{
Console.WriteLine(name);
}
}
class MetaDemo : DynamicMetaObject
{
internal MetaDemo(Expression expression, DynamicDemo demo)
: base(expression, BindingRestrictions.Empty, demo)
{
}
public override DynamicMetaObject BindInvokeMember
(InvokeMemberBinder binder, DynamicMetaObject[] args)
{
Expression self = this.Expression;
Expression target = Expression.Call
(Expression.Convert(self, typeof(DynamicDemo)),
typeof(DynamicDemo).GetMethod("TestMethod"),
Expression.Constant(binder.Name));
var restrictions = BindingRestrictions.GetTypeRestriction
(self, typeof(DynamicDemo));
return new DynamicMetaObject(target, restrictions); …Run Code Online (Sandbox Code Playgroud) 启动使用程序集的Asp.Net站点时出现以下错误,该程序集又使用dlr和Iron Python进行脚本编写.
BC30560:'ExtensionAttribute'在名称空间'System.Runtime.CompilerServices'中不明确.
问题似乎是众所周知的,问题跟踪器中有一个解决方法.
然而它说它们......
...希望在下一个版本中不需要这种解决方法.
最新版本(我正在使用的版本)是后来的版本,而不是报告中提到的版本.我也尝试下载问题跟踪器中提供的文件并替换当前版本中的文件,但这也不起作用.
除了下载源代码并手动进行构建之外,还有其他解决方案吗?
我试图在运行时生成一个简单的Lambda Expression而没有运气......这样的事情:
var result = queryableData.Where(item => item.Name == "Soap")
Run Code Online (Sandbox Code Playgroud)
这是我的示例类和fixture可查询:
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
}
IQueryable<Item> queryableData = ...;
Run Code Online (Sandbox Code Playgroud)
然后我在运行时生成一个lambda表达式,正确的代码如下:
//"item" in "item =>..."
var item = Expression
.Parameter(typeof(Item), "item");
//property of my item, this is "item.Name"
var prop = Expression
.Property(item, "Name");
//then "Soap" in '... => item.Name=="Soap"'
var value = Expression.Constant("Soap");
//equality expression "==" in my primer
var equals = Expression.Equal(prop, …Run Code Online (Sandbox Code Playgroud) 有没有人知道针对.NET CLR/DLR的ECMAScript 的真实(i ..无蒸发器)实现?理想情况下,Rhino适用于Java.在.NET Framework/Mono Framework上运行的可靠Rhino端口将是完美的.
我只看过一些提到过的项目,但从来没有看到过任何我能够运行脚本的东西.这是我已经知道的:
MSScriptControl ActiveX控件:AFAIK,这是Microsoft最后一个真正符合ECMAScript标准的实现(运行JScript 5.7).我已经与MSScriptControl集成,但不认为COM互操作是这个问题的答案.x64是此选项的杀手锏.
JScript.NET:我不算JScript.NET,因为它永远无法成功解析我的任何真实脚本.闭包似乎有问题.
管理JScript:听起来像我想要的但它似乎死在水中.这是DLR的一个主要示例实现,但后来与SilverLight纠缠在一起,并且自2007年以来似乎已经逐渐消失.有关此状态的可信来源将是有帮助的.
MyJScript:作为DLR的教程实现而构建.有人知道这是一个完整的实现吗?
Jint:.NET的JavaScript解释器.不支持Currying或try- catch- finally.
RemObjects Script for .NET:一个有趣的竞争者仍在开发中.我对他们的营销实际上是什么感到困惑,但听起来它最终可能是合适的.如果有人知道更多有关它也会有所帮助.
V8 for .NET:如果有人将V8移植到.NET,这将是很好的.据我所知,这方面也没有太大的努力.链接是一个从托管C++包装器调用它的想法.
对于后台,我希望能够在.NET中执行JavaScript; 即将一组脚本加载到上下文中并调用该上下文并检索执行结果.目前,我通过繁琐的COM Interop跳过箍使用MSScriptControl.COM的不一致使得部署和确保一致的执行非常困难.
我希望能够从.NET中执行相当复杂的JavaScript测试工具.这不是用于创建用户宏或简单的小脚本; 我需要像Rhino这样的真实JavaScript环境.如果实现是在CLR(而不是COM)之上运行的,那么这对当前的一些问题确实有帮助.
我打算为我的新项目使用动态关键字.但在介入之前,我想了解使用动态关键字而不是反射的优缺点.
在专业人士的位置,我可以找到关于动态关键字:
虽然与使用动态关键字相关的负面因素,我听到的是:
请帮助我看看我遇到的利弊是否合情合理?
我对python很感兴趣,但是我在.NET环境中工作,所以我正在研究Iron Python,并想知道它将用于什么.
你能写一个应用程序吗?或者是否为您的应用添加脚本语言?
你们是如何使用它的?
CL#中的CLR和DLR有什么区别?这两个概念可比吗?
我目前正在深入研究第二版C#,并试图实现"动态协议缓冲区" - 即在我现有的协议缓冲库之上的动态支持级别.因此,我有一个DlrMessage派生自的类型DynamicObject.经过一段时间的游戏,我设法让它以极少的代码回应简单的属性,但我想要进一步 - 并真正了解正在发生的事情.
到目前为止,我还没有找到任何关于DLR的好解释 - 很多博客文章现在都已经过时了,因为之前的CTP和.NET 4.0 beta之间已经发生了变化(我相信).MSDN文档对于DynamicObject来说,目前还很少.
我最直接的疑问是,是否有一种简单的说法,"使用反射来绑定任何我无法处理的调用,使用这个特定的对象." (换句话说,如果可能的话,我想增加现有的反射绑定,而不是自己做所有事情.)不幸的是,我没有通过猜测得到很多.
我应该知道哪些最终和最近的文档来源?我知道关于新技术的部分写作是探索,但是有助于获得帮助:)
有什么资源可以使CLR/.NET语言可调试?我正在开发一个ActionScript 3到IL编译器,它使用DLR CallSites和CallSiteBinders来处理静态编程语言的动态方面.我正在寻找有关将发出的IL映射返回源代码的任何信息,我也想知道如何使动态调用站点也能映射回来.
所以这最终有两个问题:
任何帮助将不胜感激!
在附加的Visual Studio实例中:
compiler-construction debugging cil dynamic-language-runtime dynamic
有可能,如果是这样,如何让Visual Studio在代码中突出显示动态表达式?
当我只是在一些代码上面徘徊时,visual studio告诉我这是一个动态表达.这让我意识到我在我的代码中犯了一个错误并使用了一个动态太多.但我也意识到,如果我没有徘徊,那么应该是静态的"大片"动态代码就会逃脱.
所以我想知道是否有可能使Visual Studio改变动态表达式的背景颜色,因此这些部分将清晰可辨.
[edit]
动态表达式是指在常规代码中使用dynamic关键字.
dynamic-language-runtime syntax-highlighting visual-studio-2010 visual-studio dynamic-code
dynamic ×5
c# ×4
.net ×3
c#-4.0 ×2
clr ×2
ironpython ×2
.net-4.0 ×1
cil ×1
debugging ×1
dynamic-code ×1
ecma262 ×1
javascript ×1
lambda ×1
python ×1
reflection ×1