由CSharpCodeProvider编译时编译器错误

时间:2011-10-31 01:31:12

标签: c# .net compiler-errors

我在这里有点新意,这是我的第一个问题。所以,当我做错事时,请不要愤怒(

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

除非我使用以下方法将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”

进行编译

1 个答案:

答案 0 :(得分:4)

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

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

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

或者将编译器更改为3.0版。

如果我错了,请不要愤怒我:)