最新评论
Re:动态生成与编译(一)----入门 Siupan 2011-12-08 23:26
学习了
Re:此"as"非彼"as" magic_evan 2011-11-01 15:45
一个非拆箱操作怎么会不比一个拆箱操作快呢?
没什么错的吧,我也没写过main方法带参数这种
可能它比较特殊,你把参数改成Main(string[] args)这种的看看。
Re:动态生成与编译(三)----写一个面向过程的程序 自由人软件工作室 联系QQ:82530662 2011-06-28 00:08
我生成了一个控制台的基本框架,但有些问题,请教一下哦。
生成的代码中Main函数没有参数,但我在代码中设置到参数了,不知道哪里错了,请指点!谢谢!
结果:
[code=html]
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:2.0.50727.3053
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace Sample {
using System;
public class SampleClass {
public static void Main() {
}
}
}
[/code]
代码:
[code=csharp]
void Button1Click(object sender, EventArgs e)
{
//编译单元
CodeCompileUnit unit=new CodeCompileUnit();
//命名空间
CodeNamespace space=new CodeNamespace("Sample");
//在单元中加入命名空间
unit.Namespaces.Add(space);
//导入类库
space.Imports.Add(new CodeNamespaceImport("System"));
//自定义类
CodeTypeDeclaration SampleClass=new CodeTypeDeclaration("SampleClass");
//此命名空间下加入一个自定义类
space.Types.Add(SampleClass);
//程序入口点,控制台应用程序即是Main函数
CodeEntryPointMethod main=new CodeEntryPointMethod();
//入口点函数名称
main.Name="Main";
//入口点函数返回类型
main.ReturnType=new CodeTypeReference(typeof(void));
//入口点函数参数
main.Parameters.Add(new CodeParameterDeclarationExpression(typeof(System.String),"args"));
//在自定义类中加入"入口点函数"这个成员
SampleClass.Members.Add(main);
MessageBox.Show(main.Parameters[0].Name);
//C#语言容器
CSharpCodeProvider provider=new CSharpCodeProvider();
//创建一个C#语言代码生成器
ICodeGenerator generator=provider.CreateGenerator();
CodeGeneratorOptions options=new CodeGeneratorOptions();
StreamWriter write=new StreamWriter("unit1.cs",false);
generator.GenerateCodeFromCompileUnit(unit,write,options);
write.Close();
}
[/code]
@Jeffery You
不会自动实现的,你写什么DOM,它生成什么样的代码
Re:动态生成与编译(九)----CodeDOM的局限 Jeffery You 2010-11-11 17:29
如果我新建了一个类,实现了 IDisposable 接口,在代码中能否做到实现这个接口的代码文本?谢谢
用process是另起命令行。就是相当于在控制台输入csc.exe .......
后来跟一堆东西,csc.exe的参数可以见文档。
用CompileAssemblyFromFile的话可见这个系列文章的第八篇,通过provider得到接口,设置一些编译选项就可以了。
微软的东西好处就文档全,怎么说没技术文档呢?
有源文件 怎么用process编译 又怎么调用那个System.CodeDom.Compiler 里的
CompilerResults CompileAssemblyFromFile(
CompilerParameters options,
string fileName
); 求助啊 不明白 能详细点吗?
高手,我现在是要把那个调用源文件 并要制作的工具可修改写入生成的源文件里.. 动态编译看你好容易,我都搞不懂啊 相关的资料都找不到啊技术文档都没啊
Re:动态生成与编译(一)----入门 Sonven 2009-12-07 14:54
很强大,收藏了
下班了,明天接着看,
看了楼主的帖子,省了好多事!
谢谢哈
下班了,明天接着看,
看了楼主的帖子,省了好多事!
谢谢哈
下班了,明天接着看,
看了楼主的帖子,省了好多事!
谢谢哈
Re:动态生成与编译(一)----入门 陈文奇 2009-09-21 20:31
确实有点繁琐。
继续接着看,努力学习中,谢谢lz哈
Re:动态生成与编译(一)----入门 陈文奇 2009-09-21 20:30
该回复已经被删除
@vivisimo
没有这种功能,反正以前微软只提供了一个没有任何实现的空的接口在那。
不知新版本后有什么改进。
请问要编一个对C#语法程序的词法分析器,codeDom中有没有什么方法和类封装了这样的功能,可以被直接使用的?或者C#中有没有其他这样的类或方法?词法分析程序中要提取程序的单词,并对单词的种类进行识别,以及程序中声明了什么类,变量;每个对象又是什么类型等等。谢谢!
@BillySir
Parse是个问题,写个Parse器,还不如直接修改source方便,就当是字符串操作吧。
re: 贴几个CodeDOM的链接 BillySir 2007-12-03 18:21
以前知道CodeDOM大概是作什么用的,今天一口气看完楼主的《动态生成与编译》系列,《CodeDOM浅析》系列和这篇,对CodeDOM算是有了个系统的了解。看起文章来不太费事,但写出来就难十倍了,十分佩服楼主。
Snippets就是为了弥补CodeDOM的不足而产生的,可以说用它无所不能,但却失去了DOM的精神,所以楼主说“不算是用CodeDOM的正道”。
我需要从code转到CodeDOM,即Parse方法,楼主所说有文件可以直接编译,但是不是忽略了DOM可以为对代码有个性的这样的需求提供一个结构化的对象集,我就是需要用代码来修改代码,不知道我说的清楚没有,由于没有Parse方法,本来我写好一大段code期望可以Parse后供其他代码修改,现在只能手工一行行翻译成DOM,真是苦差。
我对“CodeCompile unit does not have space for using directives or ns members, so they are placed now into first default NS ”的理解,
CodeCompile单元没有地方直接写"using"或namesapce成员,所以它们现在被放到第一个定义的namespace里面。
前面的"using"好理解,但“namesapce成员”如何理解呢?
深入浅出,继续拜读。看CodeDOM能不能在Code、DOM和IL三者之间互转,我目前遇到的问题是如何从Code转为DOM,不是人工地转,是要类似Parse的方法。
re: 序列化Hashtable lg 2007-11-15 11:04
好,本人也遇到了同样的问题,哥们分析的真透彻啊!
re: 会议签到系统项目总结目录 zdleek 2007-08-08 16:54
mark
re: RFID会议签到系统总结(二十二)――系统中的模式 自由、创新、研究、探索…… 2007-08-08 07:53
鼓励楼主
re: 会议签到系统项目总结目录 巫云 2007-08-07 15:38
路过,看看。
re: 会议签到系统项目总结目录 MYOOP 2007-08-07 12:19
好久没看到这么好的东西了。顶!!!!!!!!!!!!!1
re: CodeDOM浅析(下) lichdr 2007-08-07 10:05
@Gavin
在.net 1.1时时是没有控制的,在.net2.0有没有我不太清楚,自己可以去查一下。
一般来说那个东西放那也没什么不好的,我不但不去掉,而且还要加上一大段呢。
re: CodeDOM浅析(下)[未登录] Gavin 2007-08-06 19:18
谁来告诉我 生成出来的头注释如何去掉?
或是COMDOM类提供有相关属性可以控制!
QQ:240101561
@Jeffrey Zhao
这样啊,试了一下,果是如此,以前没仔细看生成的代码。
好文章。
ElseOnClosing的意思是如果为true则:
if
{
} else
否则就是
if
{
}
else
re: 动态生成与编译(一)----入门 Anders.Zhao 2007-05-03 09:45
好文章,受教了.
re: 五、平面图 45 2007-04-02 19:30
54
new CodePrimitiveExpression(null)
re: CodeDOM浅析(下) main 2006-08-06 14:23
comdedom全部完了,老大能不能介绍介绍这玩意到底哪些地方需要呢?
re: 动态生成与编译(一)----入门 main 2006-08-06 12:58
很好的文章~!谢了
re: ASP.NET 2.0 下的条件编译 flysnow 2006-06-29 20:47
多谢了,我试一下
re: ASP.NET 2.0 下的条件编译 lichdr 2006-06-26 14:10
@flysnow
应该还是compilerOptions这个地方,compilerOptions="/unsafe" 看看
re: ASP.NET 2.0 下的条件编译 main 2006-06-26 13:16
@flysnow
好象是在项目属性里面配置吧 :)
re: ASP.NET 2.0 下的条件编译 flysnow 2006-06-24 14:28
有一个问题想请教, ASP.NET 2.0 如何使用非安全代码。
同样是因为没有地方设置项目属性了
re: 序列化Hashtable lichdr 2006-05-10 14:52
见上一条
re: 序列化Hashtable 思无邪 2006-05-10 13:15
WriteStartElement(@"ArrayOfAnyType", @"");
for (int ia = 0; ia < a.Count; ia++) {
Write1_Object(@"anyType", @"", ((System.Object)a[ia]), true, false);
}
WriteEndElement();
这是怎么看到的?
我也遇到了序列化Hashtable的问题
re: CodeDOM浅析(下) lichdr 2006-04-21 11:33
IDE的代码生成是用模板的。
。。\Microsoft Visual Studio .NET 2003\VC#\VC#Wizards目录下有一堆模板可以看看。