【问题标题】:Compiler error when compiling by CSharpCodeProvider通过 CSharpCodeProvider 编译时出现编译器错误
【发布时间】:2011-10-31 01:31:12
【问题描述】:

我在这里有点新,这是我的第一个问题。所以当我做错事时请不要对我发火(:

我的问题:我试图在运行时编译 C# 源代码,使用 CSharpCodeProvider

除非我将 CompilerVersion 更改为“v2.0”,否则它可以毫无问题地编译:

Dictionary<string, string> provOptions = new Dictionary<string, string>();
provOptions.Add("CompilerVersion", "v2.0");

CSharpCodeProvider provider = new CSharpCodeProvider(provOptions);

它在第 15 行显示错误:

15: System.AppDomain.CurrentDomain.AssemblyResolve += (sender, args2) =>
16: {
17:     byte[] assemblydata = Convert.FromBase64String(data);
18:     return Assembly.Load(assemblydata);
19: };

例如:

Line 15, directly after "sender": ) expected

Line 15, directly after "sender": , invalid expression

还有更多。 我不知道问题出在哪里。当我使用 Visual Studio 时,它可以用“v2.0”编译好

【问题讨论】:

    标签: c# .net compiler-errors


    【解决方案1】:

    我不会说一些愚蠢的话,但 lambda 表达式和 linq 是在 C# 3.0 中引入的,而不是在 C# 2.0 中。

    为什么不使用+= (sender, args2) =&gt; 而不是只使用匿名委托? C# 2.0 支持这一点。

    System.AppDomain.CurrentDomain.AssemblyResolve += delegate (object sender, ResolveEventArgs args)
    {
        byte[] assemblydata = Convert.FromBase64String(data);
        return Assembly.Load(assemblydata);
    };
    

    或者把编译器改成3.0版。

    如果我错了,请不要生我的气:)

    【讨论】:

    • 非常感谢您的帮助(:它适用于匿名代表!
    猜你喜欢
    • 2023-04-11
    • 2018-09-22
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多