C# - 使用自定义配置在运行时编译 c# 代码

Posted

技术标签:

【中文标题】C# - 使用自定义配置在运行时编译 c# 代码【英文标题】:C# - Compile c# code at runtime with custom configuration 【发布时间】:2019-06-18 11:18:31 【问题描述】:

我有一个问题,CodeDom 编译器是否可以使用自定义配置(例如 x64 位或 x86 位)编译 c# 代码。默认情况下,它会将 c# 代码编译为具有“任何 CPU”配置的 .exe。 编译c#代码:

public static string BCS(string[] sources,string[] libs,string outPath,bool exef)
    
        CSharpCodeProvider codeProvider = new CSharpCodeProvider();
        CompilerParameters parameters = new CompilerParameters(libs);
        parameters.GenerateExecutable = exef;
        parameters.OutputAssembly = outPath;
        CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, sources);

        if (results.Errors.Count > 0)
        
            string errsText = "";
            foreach (CompilerError CompErr in results.Errors)
            
                errsText = "("+CompErr.ErrorNumber +
                            ")Line " + CompErr.Line +
                            ",Column "+CompErr.Column +
                            ":"+CompErr.ErrorText + "" +
                            Environment.NewLine;
            
            return errsText;
        
        else
        
            return "Success";
        
    

我想,你明白我的问题,如果没有,发表评论,我会详细说明。

【问题讨论】:

写得不好,你能解释一下你的错误信息是什么吗?如果你想知道 CodeDom 是否可以编译 C# 答案是可以的,请参考docs.microsoft.com/en-us/dotnet/framework/… 我没有任何错误。我只需要一种方法来使用 CodeDom 为特定平台(例如 x86 位和 x64 位)编译(到 .exe)c# 代码。 【参考方案1】:

尝试这样设置CompilerOptions

parameters.CompilerOptions = "-platform:anycpu32bitpreferred";

使用此链接中的参数

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/platform-compiler-option

附: CSharpCodeProvider 使用 csc.exe

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/command-line-building-with-csc-exe

【讨论】:

另外,你知道如何用自定义 .NET Framework 版本编译 c# 吗?比如,我想用 .NET Framework 4.6.1 构建 c# ***.com/a/9591795/10496806 var options = new Dictionary<string, string> "CompilerVersion", "v4.0" ; var compiler = new CSharpCodeProvider(options); 但我不确定是否可以根据需要指向 4.6.1,这里是编译器版本,它不同于 .net 版本 ***.com/questions/13253967/… 哦不! CompilerResults 行出现错误:System.InvalidOperationException:“找不到 csc.exe 编译器的可执行文件。” 您指的是什么“CompilerVersion”?可能是错误的,或者您的 PC 上未安装此版本,并且....是的,CSharpCodeProvider 使用 csc.exe docs.microsoft.com/en-us/dotnet/csharp/language-reference/… 请仔细阅读我第二条评论中的第二个链接***.com/a/13255462/10496806

以上是关于C# - 使用自定义配置在运行时编译 c# 代码的主要内容,如果未能解决你的问题,请参考以下文章

c#学习笔记02----自定义类库及反编译

C# wpf 如何实现自定义控件,布局时,大小发生变化,内部绘制的曲线跟随变化?

vs2008 c#应用程序配置在哪里啊?

C# 的 Sonarqube 5.4 自定义规则

自定义特性与应用

(46)C#里使用自定义类型转换(Implicit和Explicit关键字)