标签: dynamic-code

如何突出visual studio中的动态代码

有可能,如果是这样,如何让Visual Studio在代码中突出显示动态表达式?

当我只是在一些代码上面徘徊时,visual studio告诉我这是一个动态表达.这让我意识到我在我的代码中犯了一个错误并使用了一个动态太多.但我也意识到,如果我没有徘徊,那么应该是静态的"大片"动态代码就会逃脱.

所以我想知道是否有可能使Visual Studio改变动态表达式的背景颜色,因此这些部分将清晰可辨.

[edit]
动态表达式是指在常规代码中使用dynamic关键字.

dynamic-language-runtime syntax-highlighting visual-studio-2010 visual-studio dynamic-code

19
推荐指数
1
解决办法
690
查看次数

如何在动态生成的C#代码中初始化各种类型变量?

我有T4模板,我想生成.cs文件.

我有一个数组System.Data.DataColumn,我想在我生成的代码文件中用作私有变量.

ColumnName用作变量名,Value变量值和DataType可变数据类型.

我正在考虑如何在这种情况下初始化已定义的变量:

ColumnName = "col1"
ColumnValue = "text"
DatType = System.String
Run Code Online (Sandbox Code Playgroud)

我想看看输出: private System.String col1 = "text";

T4模板中的变量定义:

private <#= DataType.ToString() #> <#= ColumnName #> = "<=# ColumnValue #>"
Run Code Online (Sandbox Code Playgroud)

我正在考虑编写辅助方法,它将返回常见数据类型的变量初始化字符串.就像是:

public string ValueInitializerString
        {
            get
            {

                string valueString;
                if (this.DataType == typeof(int))
                {
                    valueString = this.Value.ToString();
                }
                else if (this.DataType == typeof(string))
                {
                    valueString = string.Format("\"{0}\"", this.Value);
                }
                else if (this.DataType == typeof(DateTime))
                {
                    DateTime dateTime = (DateTime)this.Value;

                    valueString = …
Run Code Online (Sandbox Code Playgroud)

.net c# t4 dynamic-code

7
推荐指数
1
解决办法
1398
查看次数

Java动态代码生成,支持泛型

是否有任何工具可以提供Java动态代码生成并且还支持泛型?

例如,Javassist是我需要的工具,但它不支持泛型.

我写了一个使用Java 6 Compiler API的小型lib,但据我所知它依赖于JDK.有没有办法指定另一个编译器?或者只向我的应用程序提供我需要使用Java Compiler API调用的部分?

java java-api dynamic-code java-compiler-api

6
推荐指数
1
解决办法
2440
查看次数

加载同一类的多个版本

假设我将代码库作为独立的PHP类发布.然后有人在他们的应用程序中使用该库的1.0版本.后来,我发布了该库的2.0版本,并且由于任何原因,同一个人需要在他们的应用程序中并排使用1.0和2.0,因为他或我打破了与新版本的向后兼容性.

如果类名不同,那么包含和实例化两者都很容易,因为没有命名冲突.但如果类名保持不变,我们会遇到问题:

include /lib/api-1.0/library.php;
$oldlibary = new Library();

include /lib/api-2.0/library.php;
$newlibrary = new Library();
Run Code Online (Sandbox Code Playgroud)

这不会起作用,因为我们无法使用名称加载两个类Library.另一个开发人员建议使用命名空间.以下应该有效:

namespace old {
    include /lib/api-1.0/library.php;
}
namespace new {
    include /lib/api-2.0/library.php;
}

$oldlibary = new old\Library();
$newlibrary = new new\Library();
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不是很可扩展.它适用于2实例情况(希望我不必首先使用),但要将其扩展为3,4,5或更多实例,您需要定义其他命名空间并设置,如果您没有首先使用这些名称空间,那就是一堆不必要的代码.

那么有没有办法动态创建命名空间,包含一个文件,并在一个唯一命名的变量中实例化该文件中包含的类?


让我补充一点澄清......

我正在构建一组库,供其他为几个CMS平台构建插件/模块的开发人员使用.理想情况下,每个人都会使用我的库的最新版本,但我不能保证这一点,我不能保证最终用户在新版本可用时总是升级他们的模块.

我正在尝试使用的用例是最终用户由两个不同的开发人员安装两个不同模块的用例:称为AppleOrange.这两个模块都使用我的库的1.0版本,这很棒.我们可以实例化一次,两组代码都可以从功能中受益.

后来,我发布了一个小补丁到这个库.它的版本为1.1,因为它不会破坏与1.x分支的向后兼容性.Apple的开发人员立即更新了他的本地版本并推出了他的系统的新版本.Orange的开发人员正在度假,并没有打扰.

当最终用户更新Apple时,她会获得我库的最新维护版本.因为它是维护版本,所以假定完全替换版本1.0是安全的.所以代码只是从维护补丁中实例化了1.1和Orange的好处,即使开发人员从不打扰更新他们的版本.

甚至后来,我决定更新我的API,以便出于某种原因为Facebook添加一些钩子.新功能和API扩展改变了很多关于库的内容,因此我将版本升级到2.0以将其标记为在所有情况下可能不向后兼容.Apple再一次进入并更新了他的代码.没有什么破坏,他只是用/lib最新版本替换了他的文件夹中的库. Orange决定回到学校成为一个小丑,并且已经停止维护他的模块,所以它没有得到任何更新.

当最终用户使用新版本更新Apple时,她会自动获取我的库的2.0版本.但Orange在他的系统中已经添加了Facebook钩子的代码,因此如果默认情况下将2.0卷入他的库,就会发生冲突.因此,我不是完全替换它,而是为Apple实例化一次2.0,并且并行实例化Orange附带的1.0版本,以便它可以使用正确的代码.

这个项目的重点是允许第三方开发人员根据我的代码构建系统,而不依赖于它们是可靠的,并在他们应该的时候更新他们的代码.对于最终用户来说,没有什么可以破坏,并且当在其他人的系统中使用时更新我的​​库应该是一个简单的文件替换,而不是通过并更改所有类引用.

php namespaces dynamic-code

6
推荐指数
1
解决办法
2911
查看次数

将一个对象放在 ILGenerator 的堆栈顶部

我必须将一个对象的实例传递给一个函数,因此显然所有要作为参数的信息都将加载到评估堆栈中 这是我正在寻找的代码

someClass SomeObject = new someClass();

il.Emit(OpCodes.LoadObject, SomeObject);
il.Emit(OpCodes.CallVirt, MethodInfo Function);


public void Function(Object obj)
{
       Type type = typeof(obj);
       //do something w.r.t to the type
}
Run Code Online (Sandbox Code Playgroud)

我不需要任何存储在类中的信息只是类型,我不能使用任何原始类型来做出决定

最后我读到我可以使用一些操作码使用指针来加载类型......但我在这里完全迷失了,任何帮助或指向正确方向的指针都会很棒:)

[更新]

好吧,我找到了我自己问题的答案,尝试了它,它的工作原理不知道它是否正确,但我可以成功地创建一个对象并将其加载到堆栈中并将其传递给一个函数

ConstructorInfo ci = typeof(SomeClass).GetConstructor(System.Type.EmptyTypes);
IL.Emit(OpCodes.Newobj, ci);
IL.Emit(OpCodes.Call, SomeFunctionMethodInfo);
Run Code Online (Sandbox Code Playgroud)

SomeFunctionMethodInfo 是一个以 Object 作为参数的函数,我成功地将对象传递给函数,并且也可以操作它并将类作为对象返回。

我在任何地方都找不到对这个例子的引用,只是通过 MSDN 弄清楚了,我做错了什么还是有什么缺点?请专家们纠正或提供更好的答案

.net c# ilgenerator dynamic-code

5
推荐指数
1
解决办法
3881
查看次数

有多少种方法可以添加到ruby对象?

当涉及到运行时内省和动态代码生成时,我不认为ruby有任何竞争对手,除了可能的一些lisp方言.前几天我正在做一些代码练习来探索ruby的动态设施,我开始想知道如何向现有对象添加方法.以下是我能想到的三种方式:

obj = Object.new

# add a method directly
def obj.new_method
  ...
end

# add a method indirectly with the singleton class
class << obj
  def new_method
    ...
  end
end

# add a method by opening up the class
obj.class.class_eval do
  def new_method
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)

这是冰山的一角,因为我还没有探索的各种组合instance_eval,module_evaldefine_method.是否有在线/离线资源,我可以找到更多关于这种动态技巧的信息?

ruby metaprogramming dynamic-code

5
推荐指数
1
解决办法
115
查看次数

在编译时添加/生成方法

我目前正在构建一个 API,我将要求许多开发人员使用它。其中大部分都很简单,但有几个 api 调用本质上很复杂,但应该以几乎样板的方式使用。

我想要做的是在类中生成样板代码,也许通过标记一些注释,但是这些生成的方法在 Eclipse/IntelliJ 中可用,供开发人员查看。我查看了 Javassist,但不确定运行时性质是否是一件好事。我宁愿采用编译时方法。

如果可能,我希望隐藏已实现的代码(即我不希望开发人员尝试更改生成方法的代码,因为它们会在重新编译时被覆盖)。

整个过程都是为了向开发人员和维护人员隐藏处理的复杂性,并将其仅保留在核心框架代码中。

java dynamic-code

4
推荐指数
1
解决办法
2622
查看次数

通过Web服务暴露system.dll是否存在安全问题?

我很好奇只有​​在C#中访问System.dll命名空间才能造成什么损害.

我正在玩动态代码编译,并创建了一个简单的网站,允许我输入C#代码.这是通过Web服务传递给一个类,该类符合并运行新线程中的代码并通过WS返回(代码必须返回一个字符串)结果并显示在网页上.

现在我有一个简单的检查来中止线程,如果它运行超过5秒,以确保像无限循环这样简单的东西不会崩溃.

"假设"说如果我发布这个Web应用程序,有人可以对只访问System.dll的Web服务器造成严重/任何损害吗?

**某种例子的奖励积分!:)

c# compiler-construction web-services visual-studio-2010 dynamic-code

3
推荐指数
1
解决办法
160
查看次数