2012-06-04 204 views
0

添加.NET的DLL使用的CodeDOM我有这样的事情:为什么我不能在运行时

CompilerParameters parameters = new CompilerParameters(); 
parameters.ReferencedAssemblies.Add("System.dll"); 
parameters.ReferencedAssemblies.Add("System.Windows.Forms.dll"); 
parameters.ReferencedAssemblies.Add("System.Data.Linq.dll"); 
parameters.ReferencedAssemblies.Add("System.Xml.Linq.dll"); 
parameters.ReferencedAssemblies.Add("System.Core.dll"); 

,当我运行一个程序,这是我得到的最后三个DLL的错误,前两个(System.DLL和System.Windows.Forms.DLL)没有问题和错误,但只要我添加最后三行来加载这些DLL,我就会得到类似于图片中的错误。 所以很奇怪和烦人,找不到解决方法。

谢谢。

enter image description here

+0

我猜你的编译器安装程序是在.NET 3.0或更旧的版本(3.5中添加了linq)。关闭我的头,我不知道如何改变它(也许你可以添加完全合格的程序集名称和版本号?) –

+0

@ChrisSinclair:我已经在Visual Studio中将目标平台设置为4.0。它不仅仅是Linq,即使是最后一个是System.Core,它也给出了类似的错误。 – Bohn

回答

0

哦哇!这很棘手!

它不关心Visual Studio设置的目标平台是什么,它看起来是它自己的CodeProvider类。以前我使用的是default constructor。但它也有另一个构造函数,它需要一个Dictionary参数。在这个参数中我们指定应该使用什么版本的.NET。所以,而不是仅仅创建一个新的CodeProvider对象,我应该这样做:

Dictionary<string, string> compilerInfo = new Dictionary<string, string>(); 
    compilerInfo.Add("CompilerVersion", "v3.5"); 
    CSharpCodeProvider codeProvider = new CSharpCodeProvider(compilerInfo); 

现在它的工作。

相关问题