标签: codedom

使用.NET CodeDOM在一个语句中声明和初始化字段

我想使用CodeDOM在一个语句中声明和初始化我的静态字段.我怎样才能做到这一点?

// for example
public static int MyField = 5;
Run Code Online (Sandbox Code Playgroud)

我似乎可以弄清楚如何声明一个静态字段,我可以稍后设置它的值,但我似乎无法获得上述效果.

@lomaxx,Naw,我只想要静电.我不想要const.此值可以更改.我只想一举宣告和初始化的简单性.好像编码世界中的任何东西都很简单.每个类型名称长度超过20个字符,最终构建这些巨大的表达式树.让我的眼睛出错.由于resharper的重新格式化,我今天才活着.

.net codedom

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

T4 vs CodeDom vs Oslo

在我正在使用的应用程序脚手架项目中,我正在尝试决定是否使用Oslo,T4CodeDom来生成代码.我们的目标是将依赖关系降至最低,并从用户故事中为域驱动设计驱动代码生成.第一步是从用户故事创建测试,但我们希望领域专家能够在各种不同的媒体(例如自定义应用程序,Word等)中编写他们的故事,并且仍然可以从故事.

到目前为止我所知道的:

  1. CodeDom需要.NET,但只能输出.NET类文件(例如.cs,.vb).难度水平相当高.
  2. T4需要CodeDom和VS Standard +.难度级别相当合理,尤其是T4工具箱.
  3. 奥斯陆很新.我不知道依赖项,但我想你必须至少使用.NET 3.5.我也不确定代码生成能力或添加新语法的复杂性.但是,领域专家可能很容易在Intellipad中编写用户故事.还不确定将Word中的故事转换为MGrammar的简易性.

您使用上述任何工具有什么想法,经验等等.我们希望坚持使用Microsoft或开源工具.

.net t4 code-generation codedom oslo

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

是否可以在没有编译的情况下调用C#词法/句法分析器?

考虑到SO的这个问题,调用整个C#内存编译器.当只需要词法和句法分析时:将文本解析为词汇流,检查它们并退出.

是否有可能在当前版本的System.CodeDom.Compiler中,如果没有 - 它会是吗?

.net c# codedom lexical-analysis compiler-as-a-service

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

Silverlight中的System.CodeDom.Compiler.CompilerParameters在哪里?

我想在Silverlight中创建数学表达式评估器.为了方便起见,我需要使用System.Reflection,System.Reflection.Emit,System.CodeDom.Compiler和其他相关程序集动态编译.

但是,我无法在Silverlight中找到此类.

请给我一些建议.

reflection silverlight codedom compilation reflection.emit

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

有没有简单的方法来创建方法并在C#中动态设置它的主体?

我在字符串中持有方法体.我想动态创建方法.但我不知道,如何设置它的身体.我看到使用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)

c# reflection methods codedom dynamic

4
推荐指数
2
解决办法
2176
查看次数

C# - .NET和CF.NET的代码编译器

我有一个需要使用.NET和Compact .NET Framework编译的项目.

  1. 有可能创建一个C#编译器,用两个框架编译我的项目吗?
  2. CF.NET Framework中没有一些功能,所以我自己创建了它(创建了与.NET Framework中具有完全相同名称和选项的类.如果我使用类似[CF35]的属性来解析这些类,则可以解析项目和:

    • 使用CF.NET编译项目时使用此类
    • 使用.NET编译项目时忽略此类

感谢所有建设性的答案.

[编辑]

我知道解决方案包括创建两个引用相同文件的项目.问题是,你应该每次都手动编译.此外,当你向一个文件中添加一个文件时,你需要打开第二个文件并引用它,它只是无聊而且根据我们很多人来处理同一个项目,我想自动完成这个部分.

似乎可能吗?


[编辑2] 除了......资源文件外,一切正常!

所以,要恢复,我有三个项目:

  • 开发项目(CF.NET)
  • 发布项目(CF.NET 3.5),包括所有文件通过""
  • 发布项目(NET 3.5),包括所有文件""

如上所述,一切正常,但现在我的问题是使用资源文件.

申请使用它的方法是什么?

  • 当我使用开发项目时,正确检索资源文​​件
  • 当我使用其他两个项目时,ResourceManager会抛出MissingManifestResourceException

任何的想法?

.net c# compiler-construction codedom compact-framework

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

在C#中实现编译器的最有趣和最有前途的方法是什么?

我只是在毕业项目的开始,应该持续6个月.该项目的目标是为一种脚本语言实现.Net编译器.我将编译器构造作为课程的主题,并且知道如何实现编译器的基本步骤,但我们使用Bison和简单的编译器和GCC作为后端,因此我对实现编译器知之甚少在.Net平台上.

在对这个主题进行了一些研究后,我发现了以下用于代码生成的替代解决方案(我不是在讨论编译器的其他基本部分,比如解析器 - 它超出了范围):

  1. 使用Reflection.Emit直接生成代码.
  2. 使用Reflection.Emit上的通用编译器接口抽象来实现某些代码生成的自动化.
  3. 在运行时使用CodeDOM进行C#和VB编译.
  4. 有一种新兴的C#"编译器即服务",名为Roslyn,现在可作为CTP使用.
  5. DLR支持动态代码生成,并具有一些通过表达式树等生成运行时代码的接口.
  6. Mono附带Mono.Cecil库,它似乎也有一些代码生成功能.

我的项目的主要目标是深入研究.Net的内容,学习编译器构建并为我的工作取得好成绩.第二个目标是提出一个编译器实现,以后可以在许可的开源许可下向社区开放.

那么,这里最有趣,教育性,娱乐性和前景最好的方法是什么?如果我有更多的时间,我肯定会尝试所有这些,但我需要在6个月内提交我的工作以获得积极的成绩......

亚历山大,提前谢谢你.

.net codedom reflection.emit mono.cecil roslyn

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

CodeDom:编译部分类

我正在尝试在文本文件中编译代码以更改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)

c# reflection codedom

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

CSharpCodeProvider从.NET 4.0应用程序输出.NET 2.0程序集

我正在使用CSharpCodeProvider将CodeDom对象编译为程序集.应用程序本身在.NET 4.0下运行.但是,我需要CompileAssemblyFromDom的输出来针对.NET 2.0进行构建,以便与某些外部资源兼容.如何告诉CSharpCodeProvider针对.NET 2.0构建?

.net codedom

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

从.txt文件加载VB.net代码,并使用System.CodeDom.Compiler在飞行中执行它

我已经在这篇文章中找到了这个问题的答案: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不包含任何公共成员或找不到".

vb.net codedom

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