2

I'm trying to compile some unsafe code from an application using Codedom, but everytime I get an error saying I must use "/unsafe." I've googled the issue and added:

Parameters.CompilerOptions = "/unsafe";

To my codedom code. Are there any simple solutions for this?

Edit: if it wasn't already clear, my solution didn't work.

Edit: Here is the class.

        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 に答える