标签: codedom

如何生成c#代码?

我正在写一个桌面应用程序.它需要在客户端机器上生成c#代码.

我想过使用CodeDOM(复杂)或简单的字符串操作(脆弱).还有什么?推荐哪种方式?

c# code-generation codedom

2
推荐指数
1
解决办法
334
查看次数

如何将我的解决方案中的另一个项目(程序集)添加到CompilerParameters.ReferencedAssemblies集?

假设我在主项目中编译了一串代码,如下所示.但我想在CustomClass中实现一个接口.接口位于我的解决方案中的另一个项目中(我的主项目中的部分引用)当我这样做时

公共类CustomClass:InterfaceType

我收到这样的错误.如何在动态代码中引用其他项目以便我可以使用接口和其他类?

c:\ Users\xxx\AppData\Local\Temp\m8ed4ow-.0.cs(1,32:错误CS0246:找不到类型或命名空间名称'InterfaceType'(您是否缺少using指令或程序集引用) ?)

string code2 =
"    public class CustomClass : InterfaceType " +
"    {" +
"    }";
        // Compiler and CompilerParameters
        CSharpCodeProvider codeProvider = new CSharpCodeProvider();

        CompilerParameters compParameters = new CompilerParameters();
        compParameters.GenerateInMemory = false; //default
        //compParameters.TempFiles = new TempFileCollection(Environment.GetEnvironmentVariable("TEMP"), true);
        compParameters.IncludeDebugInformation = true;
        //compParameters.TempFiles.KeepFiles = true;
        compParameters.ReferencedAssemblies.Add("System.dll");

        CodeDomProvider compiler = CSharpCodeProvider.CreateProvider("CSharp");

        // Compile the code
        CompilerResults res = codeProvider.CompileAssemblyFromSource(compParameters, code2);

        // Check the compiler results for errors
        StringWriter sw = new StringWriter();
        foreach (CompilerError ce …
Run Code Online (Sandbox Code Playgroud)

c# codedom

2
推荐指数
1
解决办法
2843
查看次数

CustomAttribute 中的 C# CodeDOM 枚举值

我正在尝试创建一个具有自定义属性的类,如下所示:

public class Head : Attribute 
{
    public Head(Permissions permission, int id)
    {
        Permission = permission;
        Id = id;
    }

    public int Id { get; private set; }
    public Permissions Permission { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

其中 Permissions 是一个枚举:

public enum Permissions { R, W, D, RW, RWD }
Run Code Online (Sandbox Code Playgroud)

所以当我生成属性时:

var head = new CodeAttributeDeclaration
{
    Name = "Head",
    Arguments = 
    {
        new CodeAttributeArgument
        {
            Value = new CodePrimitiveExpression(Permissions.RWD)
        },
        new CodeAttributeArgument
        {
            Value = new CodePrimitiveExpression(idValue);
        }
    } …
Run Code Online (Sandbox Code Playgroud)

c# enums codedom

2
推荐指数
1
解决办法
980
查看次数

CodeDom如何创建一个void返回类型的方法?

public void CreateMethod()
{
    CodeMemberMethod mymethod = new CodeMemberMethod();
    mymethod.Name = testMethod;
    CodeTypeReference ctr = new CodeTypeReference();
    //Assign the return type to the method.
    mymethod.ReturnType = ctr;

    CodeSnippetExpression snippet1 = new CodeSnippetExpression("AutomationBase obj = new AutomationBase()");
    CodeSnippetExpression snippet2 = new CodeSnippetExpression("obj.Execute(testCases[1])");       
    CodeExpressionStatement stmt1 = new CodeExpressionStatement(snippet1);
    CodeExpressionStatement stmt2 = new CodeExpressionStatement(snippet2);
    mymethod.Statements.Add(stmt1);
    mymethod.Statements.Add(stmt2);
    mymethod.Attributes = MemberAttributes.Public;
    myclass.Members.Add(mymethod);
}
Run Code Online (Sandbox Code Playgroud)

产量

 public virtual void TestCaseId002() {
            AutomationBase obj = new AutomationBase();
            obj.Execute(testCases[1]);
        }
Run Code Online (Sandbox Code Playgroud)

获得虚拟无效

我只需要无效.

.net c# asp.net code-generation codedom

2
推荐指数
1
解决办法
498
查看次数

编译并调用生成的方法

我设法使用CodeDom创建一个类,并向该类添加一个方法.现在,有没有办法构建CodeCompileUnit实例,编译代码并调用生成的方法?方法调用必须在与代码生成相同的上下文中完成.

.net code-generation codedom

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

使用CodeDomProvider在调试模式下编译源代码

我有一些我想用Microsoft.CSharp.CSharpCodeProvider类编译的源代码,我想要包含特定于调试版本的东西(例如,标有该[Condtional("DEBUG")]属性的方法).

我尝试将CompilerParameters.CompilerOptions属性设置为"/ debug",但是当我运行已编译的代码时,似乎没有包含调试内容; 所以我怀疑这不是完成我想要的正确方法.

我怎样才能做到这一点?

.net c# compiler-construction debugging codedom

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

在 C# 中动态执行字符串作为代码

我需要将字符串转换为可执行代码。该string是在foreach声明。

foreach (InsuredItem _i in p.InsuredItems)
{
    string formula = "(_i.PremiumRate/100)*SumAssured";
    _i.Premium = (Execute formula);
}
Run Code Online (Sandbox Code Playgroud)

公式是从设置加载的。这只是一个示范。我需要在 foreach 循环中执行字符串。谢谢。

c# reflection codedom

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

C#CodeDom多个CompilerOptions

我想在CodeDom中添加多个CompilerOptions,但是我不知道该怎么做。

我目前正在尝试的是:

CompilerParameters cp = new CompilerParameters(referencedAssemblies, "executable file path", false);

cp.CompilerOptions = "/unsafe";
cp.CompilerOptions = "/t:winexe";
Run Code Online (Sandbox Code Playgroud)

问题是只有两个参数中的后一个被合并到输出可执行文件中。有什么方法可以将CompilerOptions参数添加为数组吗?

感谢您的任何帮助,

埃文

c# codedom compiler-options

0
推荐指数
1
解决办法
1251
查看次数

.net 2.0导致错误:'新类型要求()' - 仅在.net 2.0中发生

CodeDom中生成以下代码.当我将目标框架设置为.net 4.0时,它可以正常工作 - 没有错误或警告.当我将目标框架设置为.net 2.0时,我收到以下错误:

CS1526:新类型表达式需要()或[]

test soVar;
soVar = new test { foo = 0x10007 }; // Error occurs on this line

    [StructLayout(LayoutKind.Sequential)]
    struct test
    {
        public uint foo;
    }
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?!为什么切换到.net 2.0会突然引发错误?

期待这里的任何想法.

谢谢,

埃文

c# console codedom

0
推荐指数
1
解决办法
334
查看次数

MessageBox不会显示在CodeDom生成的代码中

我用C#编写了一个构建器,用CodeDom编译代码.编译后的.exe必须显示一个MessageBox,但它不会这样做.一切正常,.exe被编译和生成,但输出不起作用(MessageBox没有出现).

这是我的代码:

private void button1_Click(object sender, EventArgs e)
    {
        String InputCode = String.Empty;
        //Unser TestCode, in dem Wir ein MessageBox aufrufen
        InputCode = "MessageBox.Show((1 + 2 + 3).ToString());";   //Here is the MSGBox

        System.CodeDom.Compiler.CodeDomProvider CodeDomProvider = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("CSharp");
        //Parameter für die Compilierung, wie die einzubindenen Bibliotheken usw.
        System.CodeDom.Compiler.CompilerParameters CompilerParameters = new System.CodeDom.Compiler.CompilerParameters();
        CompilerParameters.ReferencedAssemblies.Add("System.dll");
        CompilerParameters.OutputAssembly = "Outpu2t.exe";
        CompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");
        CompilerParameters.CompilerOptions += "/target:winexe" + " " + "/win32icon:" + "\"" + textBox6.Text + "\"";
        CompilerParameters.GenerateExecutable = true;
        CompilerParameters.GenerateInMemory = false;

        //Über den StringBuilder wird der …
Run Code Online (Sandbox Code Playgroud)

c# codedom

0
推荐指数
1
解决办法
314
查看次数

使用codedom在c#中编写代码

我想生成用于创建哈希表对象的代码,并为其分配密钥和值编程.它应该类似于

Hashtable ht = new Hashtable();

ht.Add( "key1", "value1" );
ht.Add( "key2", "value2" );
ht.Add( "key3", "value3" );
Run Code Online (Sandbox Code Playgroud)

例如

CodeMemberMethod testMethod = new CodeMemberMethod();

        testMethod.Name = "Test" + mi.Name + "_" + intTestCaseCnt;
        testMethod.Attributes = MemberAttributes.Public;.....
Run Code Online (Sandbox Code Playgroud)

这里它创建了一个方法programacticaly现在我想创建一个哈希表,所以我问如何?

c# codedom

-1
推荐指数
1
解决办法
1861
查看次数

防止Codedom构建被反编译

只是询问加密构建.现在排序,谢谢所有<3

c# codedom

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

错误"不包含静态"Main"方法适用于入口点

当我尝试使用CodeDom编译源代码时出现此错误

不包含适用于入口点的静态"主"方法!

我已经在Google上搜索并阅读了其他答案,但我不知道如何修复它.

有人可以帮帮我吗?这是我的源代码:http: //picz.to/image/ao5n

    ^        private void button2_Click(object sender, EventArgs e)
    {
        SaveFileDialog d = new SaveFileDialog();
        d.Filter = "Executable (*.exe)|*.exe";
        if (d.ShowDialog() == DialogResult.OK)
        {
            string source = Properties.Resources.source;
            CompilerParameters param = new CompilerParameters();
            param.CompilerOptions += "/target:winexe" + " " + "/win32icon:" + "\"" + textBox1.Text + "\"";
            param.GenerateExecutable = true;
            param.ReferencedAssemblies.Add("System.Windows.Forms.dll");
            param.ReferencedAssemblies.Add("System.dll");
            param.OutputAssembly = d.FileName;

            StringBuilder Temp = new StringBuilder();
            String InputCode = String.Empty;
            InputCode = "MessageBox.Show((1 + 2 + 3).ToString());";
            Temp.AppendLine(@"using System;");
            Temp.AppendLine(@"using System.Windows.Forms;"); …
Run Code Online (Sandbox Code Playgroud)

c# codedom

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