【问题标题】:Building Program with unsafe code in Codedom在 Codedom 中使用不安全代码构建程序
【发布时间】:2014-11-01 01:02:53
【问题描述】:

我正在尝试从使用 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;
    }

【问题讨论】:

  • 您的解决方案在什么方面不起作用?您显然已经获得了更多信息 - 请与我们分享。
  • 我只是收到了一个编译器错误提示:“错误:不安全代码可能仅在使用 /unsafe 编译时出现。”

标签: c# codedom unsafe


【解决方案1】:

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

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);
        }
    }
}

【讨论】:

  • 感谢您的输入,但我的代码似乎几乎相同。我尝试了一些调整,但仍然遇到同样的错误。
  • @user1742916:当你运行我给出的确切代码时会发生什么?如果这在您的盒子上失败,那么可能是版本问题。如果它没有失败,那么显然“几乎相同”还不够接近......但是没有看到你的代码,我帮不了你。
  • 对不起乔恩。正如你们大多数人可能看到的那样,我在代码中犯了一个非常愚蠢的错误。我后来更改了 CompilerOptions 以使输出成为 exe 并且没有使用 +=。
【解决方案2】:
var Parameters = new CompilerParameters
    {
        CompilerOptions = "/unsafe"
    };

及以后:

Parameters.CompilerOptions = " /target:winexe";

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

Parameters.CompilerOptions += " /target:winexe";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    相关资源
    最近更新 更多