我正在开发一个基于元模型在运行时生成代码的项目.我为此使用了vb.net xml文字,但今天我遇到了StringTemplate项目.有没有人在C#项目中成功使用过这个库.
我目前正在开发一个应用程序,您可以使用它创建"程序"而无需编写源代码,只需单击并播放即可.
现在的问题是如何从我的数据模型生成可执行程序.有很多可能性,但我不确定哪一个对我最好.我需要生成具有类和命名空间的程序集以及可以作为应用程序一部分的所有内容.
CodeDOM类:我听说过这个类的很多限制和错误.我需要在方法参数和返回值上创建属性.这支持吗?
以编程方式创建C#源代码然后在其上调用CompileAssemblyFromFile:这可以工作,因为我可以生成我想要的任何代码,C#支持大多数CLR功能.但这不会很慢吗?
使用反射ILGenerator类:我认为我可以生成所有可能的.NET代码.但我认为这比其他方法更复杂,更容易出错?
有其他可能的解决方案吗?
编辑:该工具是开发应用程序的一般工具,它不限于特定的域.我不知道它是否可以被视为可视化编程语言.用户可以创建类,方法,方法调用,各种表达式.它不会非常有限,因为您应该能够完成实际编程语言中允许的大多数事情.目前,用户仍然必须将很多东西写成文本,但最终的目标是,几乎所有东西都可以一起点击.
将轨道2发电机转换为轨道3有多困难?我一直在寻找有用的插件,但后来发现生成器只用于rails 2.我意识到它只是一个方便,但是如果将生成器迁移到rails 3就像调整生成器代码中的几行一样简单,我会只需这样做(并将工作提交给github以供将来的用户使用).
这是我一直在考虑使用的一个这样的发生器,例如(来自反馈)
require File.expand_path(File.dirname(__FILE__) + "/lib/insert_routes.rb")
class FeedbackFormGenerator < Rails::Generator::Base
attr_accessor :name,
:model_class_name,
:controller_class_name,
:helper_class_name,
:mailer_class_name
def initialize(runtime_args, runtime_options = {})
super
@name = (runtime_args[0] || "feedback").downcase
@model_class_name = name.classify
@mailer_class_name = "#{@model_class_name}Mailer"
@controller_class_name = "#{@model_class_name.pluralize}Controller"
@helper_class_name = "#{@model_class_name.pluralize}Helper"
#@js_framework = (runtime_options[''])
end
def manifest
record do |m|
puts "hello"
add_model(m)
add_mailer(m)
add_controller(m)
add_helper(m)
add_views(m)
add_routes(m)
add_unit_test(m)
add_functional_test(m)
add_stylesheet(m)
add_javascript(m)
add_images(m)
end
end
def add_stylesheet(m)
m.directory 'public/stylesheets'
m.file 'feedback.css', 'public/stylesheets/feedback.css'
end
def add_javascript(m)
m.directory 'public/javascripts'
file_name …Run Code Online (Sandbox Code Playgroud) code-generation ruby-on-rails generator ruby-on-rails-3 rails-3-upgrade
我一直在努力理解我一直在阅读有关RESTful服务的几点.我希望有人可以帮忙澄清一下.
1a)在讨论RESTful服务时似乎普遍厌恶生成的代码.
1b)如果您使用WADL为RESTful服务生成客户端,则在服务更改时 - 您的客户端代码也是如此.
为什么我没有得到它:无论您是引用WADL还是使用生成的代码,或者您是否已从RESTful响应中手动提取数据并将其映射到您的UI(或者您正在使用它们执行的任何操作),如果底层更改了某些内容服务似乎在两种情况下代码都会崩溃.例如,如果返回的数据从FirstName和LastName更改为FullName,则在两个实例中都必须更新代码以获取新字段,并且可能以不同方式处理它.
2)RESTful服务不需要WADL的论点,因为返回类型应该是众所周知的MIME类型,并且您应该已经知道如何处理它们.
为什么我没有得到它:是否期望对于服务返回的每个"类型"数据,将存在唯一的MIME类型?如果是这种情况,那是否意味着RESTful服务的使用者应该阅读RFC以确定返回数据的结构,如何使用每个字段等?
我已经做了很多阅读,试图为自己解决这个问题,所以我希望有人可以提供具体的例子和现实世界的场景.
我想在Visual Studio 2010中添加一个编辑器,它应该类似于你为Entity Framework获得的编辑器,即你有一个可视化设计器,它将自己的配置保存到自己的文件中,然后从中生成代码.
因此,这涉及两个方面是特定文件扩展名的可视化表示,第二个是代码生成(或者代码是在文件编辑时生成还是仅在生成时生成?)
我已经完成了一些冲浪,但无法获得有关如何执行这些特定事情的任何资源(尤其是代码生成部分),任何指向正确方向的资源都可能会受到赞赏.
是否有一些开源代码已经写在那里接受具有属性和验证属性的类,并输出一个带有与这些属性对应的控件的Windows窗体?
例子:
public bool IsRed { get; set; }
Run Code Online (Sandbox Code Playgroud)
生成带有Is Red?标签的复选框.
public int NumberOfDays { get; set; }
Run Code Online (Sandbox Code Playgroud)
生成一个带有标签的文本框,Number of Days并仅将输入限制为数字字符.
[Required]
public Color Color { get; set; }
Run Code Online (Sandbox Code Playgroud)
其中Color是表单的枚举
public enum Color
{
Red,
Green,
Blue
}
Run Code Online (Sandbox Code Playgroud)
生成一个组合框,其中包含用Red Green和填充的列表Blue,并使其成为必需项.
理想情况下,生成的代码包含一个方法,该方法接受我的类的实例,并使用我的实例的属性中的值预先填充winform中的控件.相应地,另一种方法将控件中的现有值保存到我的类的实例中.
有没有这样的东西?
请注意:我不是在寻找:
当我发出LLVM代码时,我应该避免使用'insertvalue'指令结合加载和存储吗?当我使用它时,我总是得到错误的优化本机代码.请看以下示例:
; ModuleID = 'mod'
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
target triple = "x86_64-pc-linux-gnu"
%A = type { i64, i64, i64, i64, i64, i64, i64, i64 }
@aa = external global %A*
define void @func() {
entry:
%a1 = load %A** @aa
%a2 = load %A* %a1
%a3 = insertvalue %A %a2, i64 3, 3
store %A %a3, %A* %a1
ret void
}
Run Code Online (Sandbox Code Playgroud)
当我运行"llc -o - -O3 mod.ll"时,我得到了这个可怕的代码:
func: # @func
.Ltmp0:
.cfi_startproc
# BB#0: # %entry
movq aa(%rip), %rax
movq …Run Code Online (Sandbox Code Playgroud) 在Eclipse中有一个方便的命令
Source -> Generate Delegate Methods …
Run Code Online (Sandbox Code Playgroud)
不幸的是,这仅适用于当前类的属性,而不适用于其父类之一的可见属性.
您是否知道一种解决方法,我可以自动为从父类继承的属性创建委托方法?
我正在使用Mono.CSharp Evaluator为我的Windows应用程序提供基本脚本功能.
理想情况下,我希望能够通过将Debugger.Break函数插入到脚本代码中来调试和逐步执行在应用程序中创建的脚本.
可以使用CSharpCodeProvider执行此操作,如下所述:如何调试/中断编码编译的代码,但我似乎无法找到有关如何使用Evaluator执行此操作的任何内容.
我已经尝试在CompilerSettings中设置GenerateDebugInfo标志和OutputFile,但是没有太多运气让它运行起来.
code-generation ×10
c# ×5
.net ×1
asp.net-mvc ×1
codedom ×1
debugging ×1
delegates ×1
eclipse ×1
generator ×1
haskell ×1
java ×1
llvm ×1
mono ×1
optimization ×1
plugins ×1
reflection ×1
rest ×1
templates ×1
web-services ×1
winforms ×1
x86-64 ×1
xsd ×1