标签: codedom

设置codeDOM文件的文件版本

我正在寻找为使用codeDOM生成的exe文件设置文件版本的任何方法.我的总是0.0.0.0.编程显然是首选,但在这一点上,任何东西都会好于没有.

c# codedom file version

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

C#到Oxygene代码转换器

我知道CodeGear制作的BabelCode使用Code DOM将C#转换为Delphi for .NET.我很好奇是否还有其他类似工具将C#转换为Delphi Prism?如果没有,使用Code DOM创建一个是什么(是的,这是开放式的!)

更新:现在已经内置到Delphi Prism中.只需粘贴或导入您的C#,您就拥有了Oxygene即Delphi Prism Code.

c# delphi codedom oxygene

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

C#和元数据文件错误

我使用MSDN上的教程创建了自己的小c#编译器,但它无法正常工作.我得到一些错误,然后我修复它们,然后我得到新的,不同的错误,然后我修复它们等等.

最新的错误让我很困惑.

---------------------------

---------------------------
Line number: 0, Error number: CS0006, 'Metadata file 'System.Linq.dll' could not be found;




---------------------------
OK   
---------------------------
Run Code Online (Sandbox Code Playgroud)

我不知道这是什么意思.

有人可以解释一下这里发生了什么吗?

这是我的代码.

我的样本C#编译器代码: 使用系统;

namespace JTM
{
    public class CSCompiler
    {
        protected string ot,
            rt,
            ss, es;

        protected bool rg, cg;

        public string Compile(String se, String fe, String[] rdas, String[] fs, Boolean rn)
        {
            System.CodeDom.Compiler.CodeDomProvider CODEPROV = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("CSharp");
            ot =
                fe;

            System.CodeDom.Compiler.CompilerParameters PARAMS = new System.CodeDom.Compiler.CompilerParameters();
            // Ensure the compiler generates an EXE file, not a DLL.
            PARAMS.GenerateExecutable = …
Run Code Online (Sandbox Code Playgroud)

.net c# compiler-construction codedom winforms

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

使用CodeDom从外部类调用方法

我有两种方法; 其中一个位于一个类之外,另一个位于类中.我希望能够使用CodeDom从类外部的方法调用到类内部的方法.通过使用代码,这将更容易解释...

内部方法类:

public static class Public
{
    public static byte[] ReadAllData(string sFilePath)
    {
        byte[] b = new byte[sFilePath.Length];
        b = System.IO.File.ReadAllBytes(sFilePath);
        return b;
    }  
}
Run Code Online (Sandbox Code Playgroud)

**来自另一个班级:

Public.ReadAllData(@"C:\File.exe");
Run Code Online (Sandbox Code Playgroud)

我想重新创建以上使用 CodeDom -

CodeMemberMethod method = new CodeMemberMethod();

method.Statements.Add(new CodePropertyReferenceExpression(
new CodeVariableExpression("Public"), "ReadAllData"));
Run Code Online (Sandbox Code Playgroud)

上面的代码将产生以下输出 - 但请注意我无法传递任何参数!

Public.ReadAllData;
Run Code Online (Sandbox Code Playgroud)

c# methods codedom class

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

C#的CodeDom编译器

我一直在努力让CodeDom工作,所以我可以在运行时为我的应用程序动态创建代码.然而,经过许多教程和反复试验,我遇到了一个我似乎无法通过的问题.我一直在代码看起来完全像应该编译错误.当我的代码中没有'\'时,我得到"无法识别的转义序列'\'".

我得到的错误都在第1行.这里它们是有序的:CS1009 CS1056(连续3次)CS0116

这是我有的:

正在编译的代码:

using System;
using System.Windows.Forms;
namespace sdjkfhj 
{    
    public class Sample 
    {
        public static void main()
        {
            MessageBox.Show("Working");
            return;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器代码如下:

public void Compile(string file)
    {
        var prov = new Dictionary<string, string>();
        prov.Add("CompilerVersion", "v2.0");
        CSharpCodeProvider c = new CSharpCodeProvider();
        ICodeCompiler comp = c.CreateCompiler();

        CompilerParameters param = new CompilerParameters();
        param.GenerateExecutable = true;
        param.OutputAssembly = file + ".exe";
        param.ReferencedAssemblies.Add("System.dll");
        param.ReferencedAssemblies.Add("System.Windows.Forms.dll");
        if (c.Supports(GeneratorSupport.EntryPointMethod))
            param.MainClass = "Sample";

        CompilerResults results = comp.CompileAssemblyFromSource(param, file);

        if (results.Errors.Count > 0)
        {
            foreach …
Run Code Online (Sandbox Code Playgroud)

c# compiler-construction codedom

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

Type.GetType(string)应该知道动态生成的类型吗?

我有一个应用程序,使用CodeDom编译器创建一些代码.我可以看到生成的程序集在内存中.但是当我调用Type.GetType(typeName)时,它返回null.我发现这有点令人困惑.

我究竟做错了什么?

static void Main(string[] args)
{
    // FYI: Code is some dummy class with only 1 instance method.
    string code = System.IO.File.ReadAllText("CodeToCompile.cs.txt");

    string errors = null;
    Assembly asm = DynamicCompiler.Compile(code, generateInMemory: true, generateDebugInfo: false, message: ref errors);

    // Get type from the generated assembly. We know there is only one.
    Type oneAndOnlyTypeInAssembly = asm.GetTypes().First();

    string typeName = oneAndOnlyTypeInAssembly.AssemblyQualifiedName;

    // Tell the type system to return instance of type based on fully qualified name.
    // I'd expect this to work, …
Run Code Online (Sandbox Code Playgroud)

.net c# reflection codedom

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

在运行时编译代码时添加其他引用

我发现这个程序(http://support.microsoft.com/kb/304655),其中i编译运行时的代码,它适用于使用参考代码,

using System;
Run Code Online (Sandbox Code Playgroud)

以下是在运行时编译代码的程序代码,

        CSharpCodeProvider codeProvider = new CSharpCodeProvider();
        ICodeCompiler icc = codeProvider.CreateCompiler();

        string Output = "Out.exe";
        Button ButtonObject = (Button)sender;

        textBox2.Text = "";
        System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
        //Make sure we generate an EXE, not a DLL
        parameters.GenerateExecutable = true;
        parameters.OutputAssembly = Output;
        CompilerResults results = icc.CompileAssemblyFromSource(parameters, textBox1.Text);

        if (results.Errors.Count > 0)
        {
            textBox2.ForeColor = Color.Red;
            foreach (CompilerError CompErr in results.Errors)
            {
                textBox2.Text = textBox2.Text +
                            "Line number " + CompErr.Line +
                            ", Error Number: " + …
Run Code Online (Sandbox Code Playgroud)

c# asp.net codedom system.diagnostics json.net

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

如何验证CodeDOM中的命名空间名称?

我使用SE中的CodeDOM找到了类名验证方法,我用它:

System.CodeDom.Compiler.CodeGenerator.IsValidLanguageIndependentIdentifier(string value)

通过此链接:是否有.NET函数来验证类名?

但是,类名不允许'.' (OEM期间)名称空间可以是这样的: System.Linq例如,允许'.'.在寻找Regex用于验证命名空间名称的选项或循环之前,我想知道.NET中是否有任何方法可用于此任务.

编辑:

实际情况是,我有一个来自.用户可以从文本框中提供类名和命名空间.对于该类名和命名空间,我将提供生成的代码.如果用户输入SomeClass作为类名,Some.Namespace作为名称空间,则生成的代码将为:

namespace Some.Namespace   
{   
  class SomeClass{}   
}
Run Code Online (Sandbox Code Playgroud)

为此,我需要验证用户输入的这两个名称.

c# codedom namespaces validating

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

如何使用CodeDom创建一个接口方法

我正在使用CodeDom生成我的WCF服务接口和实现文件.我在CodeMemberMethod上找不到任何可以生成接口方法的选项.如果我使用MemberAttributes.Abstract,我几乎就在那里,但它包含对接口无效的abstract关键字.有谁知道生成方法的正确语法?

这是我为生成接口文件而开发的代码:private void CreateServiceContractFile(Type entity,BoElement bo,DirectoryInfo serviceOutputDir,AppParameters appPrams){CodeCompileUnit serviceFileUnit = new CodeCompileUnit();

        CodeNamespace importNameSpace = new CodeNamespace("");
        importNameSpace.Imports.Add(new CodeNamespaceImport("System"));
        importNameSpace.Imports.Add(new CodeNamespaceImport("System.Collections.Generic"));
        importNameSpace.Imports.Add(new CodeNamespaceImport("System.Linq"));
        importNameSpace.Imports.Add(new CodeNamespaceImport("System.Runtime.Serialization"));
        importNameSpace.Imports.Add(new CodeNamespaceImport("System.ServiceModel"));
        importNameSpace.Imports.Add(new CodeNamespaceImport("System.ServiceModel.Web"));
        importNameSpace.Imports.Add(new CodeNamespaceImport("System.Text"));
        importNameSpace.Imports.Add(new CodeNamespaceImport("ALVIN.BusinessObjects"));
        importNameSpace.Imports.Add(new CodeNamespaceImport("DAOObjects = ALVIN.DAO"));
        importNameSpace.Imports.Add(new CodeNamespaceImport("ALIAS.BusinessObjects"));
        importNameSpace.Imports.Add(new CodeNamespaceImport("System.Data.Entity.Validation"));
        importNameSpace.Imports.Add(new CodeNamespaceImport("System.ComponentModel.DataAnnotations"));
        importNameSpace.Imports.Add(new CodeNamespaceImport("System.Data.Objects"));
        importNameSpace.Imports.Add(new CodeNamespaceImport("ALIAS.Common.Utility"));
        importNameSpace.Imports.Add(new CodeNamespaceImport("ALIAS.EventMessages"));
        importNameSpace.Imports.Add(new CodeNamespaceImport("ALIAS.ServiceCommon"));


        importNameSpace.Imports.Add(new CodeNamespaceImport(appPrams.BoNameSpace));

        serviceFileUnit.Namespaces.Add(importNameSpace);

        string serviceName = string.Format("{0}Service", entity.Name);

        CodeTypeDeclaration serviceClass = new CodeTypeDeclaration(serviceName);
        serviceClass.IsClass = true;
        serviceClass.BaseTypes.Add(new CodeTypeReference("I" + serviceName));
        serviceClass.TypeAttributes = TypeAttributes.Public;
        serviceClass.Comments.AddRange(Helper.CreateComment("The Service Contract class"));

        CodeParameterDeclarationExpression headerParm …
Run Code Online (Sandbox Code Playgroud)

c# wcf codedom interface

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

.Net CodeDom-在.net中实现lambda表达式

我想使用CodeDom编写如下内容:

.Where(x => x.Id == 2);
Run Code Online (Sandbox Code Playgroud)

我不知道CodeDom(System.CodeDom)中的等效功能。

.net c# codedom

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