2

我正在尝试从使用 Codedom 的应用程序中编译一些不安全的代码,但每次我收到一条错误消息说我必须使用“/unsafe”。我已经用谷歌搜索了这个问题并添加了:

Parameters.CompilerOptions = "/unsafe";

到我的代码域代码。有什么简单的解决方案吗?

编辑:如果还不清楚,我的解决方案不起作用。

编辑:这是课程。

        public static bool Compile(string EXE_Name, string Source)
    {
        var Compiler = new CSharpCodeProvider();
        var Parameters = new CompilerParameters
        {
            CompilerOptions = "/unsafe"
        };
        CompilerResults cResults = default(CompilerResults);

        Parameters.GenerateExecutable = true;
        Parameters.OutputAssembly = EXE_Name;
        Parameters.ReferencedAssemblies.Add(typeof(System.Xml.Linq.Extensions).Assembly.Location);
        Parameters.ReferencedAssemblies.Add("System.dll");
        Parameters.ReferencedAssemblies.Add("System.Core.dll");
        Parameters.ReferencedAssemblies.Add("System.Data.dll");
        Parameters.ReferencedAssemblies.Add("System.Data.DataSetExtensions.dll");
        Parameters.ReferencedAssemblies.Add("System.Deployment.dll");
        Parameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");
        Parameters.ReferencedAssemblies.Add("System.Drawing.dll");
        Parameters.ReferencedAssemblies.Add("System.Xml.dll");

        Parameters.CompilerOptions = " /target:winexe";
        Parameters.TreatWarningsAsErrors = false;

        cResults = Compiler.CompileAssemblyFromSource(Parameters, Source);

        if (cResults.Errors.Count > 0)
        {
            foreach (CompilerError CompilerError_loopVariable in cResults.Errors)
            {
                CompilerError error = CompilerError_loopVariable;
                MessageBox.Show("Error: " + error.ErrorText, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            return false;
        }
        else if (cResults.Errors.Count == 0)
        {
            return true;
        }
        return true;
    }
4

2 回答 2

3

它对我有用 - 也许您没有正确设置参数?

using System.CodeDom.Compiler;
using Microsoft.CSharp;

class Test
{
    public static void Main(string[] args)
    {
        var compiler = new CSharpCodeProvider();
        var parameters = new CompilerParameters { 
            CompilerOptions = "/unsafe"
        };
        var source = "unsafe struct Foo {}";
        var result = compiler.CompileAssemblyFromSource(parameters, source);
        // No errors are shown with the above options set
        foreach (var error in result.Errors)
        {
            Console.WriteLine(error);
        }
    }
}
于 2012-11-15T06:52:25.977 回答
0
var Parameters = new CompilerParameters
    {
        CompilerOptions = "/unsafe"
    };

然后:

Parameters.CompilerOptions = " /target:winexe";

您只需将“/unsafe”替换为“/target:winexe”。利用:

Parameters.CompilerOptions += " /target:winexe";
于 2014-10-31T17:02:53.750 回答