我想使用CodeDOM在一个语句中声明和初始化我的静态字段.我怎样才能做到这一点?
// for example
public static int MyField = 5;
Run Code Online (Sandbox Code Playgroud)
我似乎可以弄清楚如何声明一个静态字段,我可以稍后设置它的值,但我似乎无法获得上述效果.
@lomaxx,Naw,我只想要静电.我不想要const.此值可以更改.我只想一举宣告和初始化的简单性.好像编码世界中的任何东西都很简单.每个类型名称长度超过20个字符,最终构建这些巨大的表达式树.让我的眼睛出错.由于resharper的重新格式化,我今天才活着.
在我正在使用的应用程序脚手架项目中,我正在尝试决定是否使用Oslo,T4或CodeDom来生成代码.我们的目标是将依赖关系降至最低,并从用户故事中为域驱动设计驱动代码生成.第一步是从用户故事创建测试,但我们希望领域专家能够在各种不同的媒体(例如自定义应用程序,Word等)中编写他们的故事,并且仍然可以从故事.
到目前为止我所知道的:
您使用上述任何工具有什么想法,经验等等.我们希望坚持使用Microsoft或开源工具.
考虑到SO的这个问题,调用整个C#内存编译器.当只需要词法和句法分析时:将文本解析为词汇流,检查它们并退出.
是否有可能在当前版本的System.CodeDom.Compiler中,如果没有 - 它会是吗?
我想在Silverlight中创建数学表达式评估器.为了方便起见,我需要使用System.Reflection,System.Reflection.Emit,System.CodeDom.Compiler和其他相关程序集动态编译.
但是,我无法在Silverlight中找到此类.
请给我一些建议.
我在字符串中持有方法体.我想动态创建方法.但我不知道,如何设置它的身体.我看到使用CodeDom非常乏味.我看到使用Emit和OpCodes.有没有办法从字符串变量中使用现成的代码?
string method_body = "return \"Hello, world!\";"; //there is method body
DynamicMethod dm = new System.Reflection.Emit.DynamicMethod("My_method",
typeof(string), new Type[] { }); //any way to create method dynamically
//any way to set body
string result = (string)dm.Invoke(...); //I need write result in variable
Run Code Online (Sandbox Code Playgroud) 我有一个需要使用.NET和Compact .NET Framework编译的项目.
CF.NET Framework中没有一些功能,所以我自己创建了它(创建了与.NET Framework中具有完全相同名称和选项的类.如果我使用类似[CF35]的属性来解析这些类,则可以解析项目和:
?
感谢所有建设性的答案.
[编辑]
我知道解决方案包括创建两个引用相同文件的项目.问题是,你应该每次都手动编译.此外,当你向一个文件中添加一个文件时,你需要打开第二个文件并引用它,它只是无聊而且根据我们很多人来处理同一个项目,我想自动完成这个部分.
似乎可能吗?
[编辑2] 除了......资源文件外,一切正常!
所以,要恢复,我有三个项目:
如上所述,一切正常,但现在我的问题是使用资源文件.
申请使用它的方法是什么?
任何的想法?
我只是在毕业项目的开始,应该持续6个月.该项目的目标是为一种脚本语言实现.Net编译器.我将编译器构造作为课程的主题,并且知道如何实现编译器的基本步骤,但我们使用Bison和简单的编译器和GCC作为后端,因此我对实现编译器知之甚少在.Net平台上.
在对这个主题进行了一些研究后,我发现了以下用于代码生成的替代解决方案(我不是在讨论编译器的其他基本部分,比如解析器 - 它超出了范围):
我的项目的主要目标是深入研究.Net的内容,学习编译器构建并为我的工作取得好成绩.第二个目标是提出一个编译器实现,以后可以在许可的开源许可下向社区开放.
那么,这里最有趣,教育性,娱乐性和前景最好的方法是什么?如果我有更多的时间,我肯定会尝试所有这些,但我需要在6个月内提交我的工作以获得积极的成绩......
亚历山大,提前谢谢你.
我正在尝试在文本文件中编译代码以更改WinForms应用程序主窗体上的TextBox中的值.IE浏览器.使用方法向调用表单添加另一个partial类.表单有一个按钮(button1)和一个TextBox(textBox1).
文本文件中的代码是:
this.textBox1.Text ="Hello World !!";
和代码:
namespace WinFormCodeCompile
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// Load code from file
StreamReader sReader = new StreamReader(@"Code.txt");
string input = sReader.ReadToEnd();
sReader.Close();
// Code literal
string code =
@"using System;
using System.Windows.Forms;
namespace WinFormCodeCompile
{
public partial class Form1 : Form
{
public void UpdateText()
{" + input + @"
}
}
}";
// Compile code
CSharpCodeProvider cProv …Run Code Online (Sandbox Code Playgroud) 我正在使用CSharpCodeProvider将CodeDom对象编译为程序集.应用程序本身在.NET 4.0下运行.但是,我需要CompileAssemblyFromDom的输出来针对.NET 2.0进行构建,以便与某些外部资源兼容.如何告诉CSharpCodeProvider针对.NET 2.0构建?
我已经在这篇文章中找到了这个问题的答案:https://stackoverflow.com/a/14711110/1764912
但是我的下一个查询是,当我尝试在这个动态代码中声明一个DataTable或MsgBox时,它给我一个错误,"Type'DataTable'未定义"和"Type'MsgBox'未定义"是.如果我使用动态代码中的第一行添加导入:
Imports System.Data
Run Code Online (Sandbox Code Playgroud)
要么
Imports System.Data.DataTable
Run Code Online (Sandbox Code Playgroud)
或者如果我在GenerateScript()函数中使用以下任何代码(请参阅/sf/answers/1029777731/以获取GenerateScript()函数)
Dim importDataNameSpace As String = GetType(DataTable).Namespace
Dim codeArray() As String = New String() {"Imports " & importDataNameSpace & Environment.NewLine & code}
Run Code Online (Sandbox Code Playgroud)
或者如果我使用
Dim codeArray() As String = New String() {"Imports System.Data" & Environment.NewLine & code}
Run Code Online (Sandbox Code Playgroud)
要么
Dim codeArray() As String = New String() {"Imports System.Data.DataTable" & Environment.NewLine & code}
Run Code Online (Sandbox Code Playgroud)
在上述所有情况下,它都会给我一个错误"System.Data不包含任何公共成员或找不到".
codedom ×10
.net ×6
c# ×4
reflection ×3
compilation ×1
dynamic ×1
methods ×1
mono.cecil ×1
oslo ×1
roslyn ×1
silverlight ×1
t4 ×1
vb.net ×1