我在这里有点新意,这是我的第一个问题。所以,当我做错事时,请不要愤怒(
我的问题:我正在尝试使用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”
进行编译答案 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版。
如果我错了,请不要愤怒我:)