CSharpCodeProvider中的DLL引用只有在设置为.NET 2.0时才有效吗?

Bla*_*lam 2 .net c# dll .net-3.5 csharpcodeprovider

当我将CSharpCodeProvider类设置为使用.NET 3.5时,它会尝试加载某些引用的DLL时出错:

Line number 0, Error Number: CS0006, 'Metadata file 'System.Linq.dll' could not be found;
Line number 0, Error Number: CS0006, 'Metadata file 'System.Collections.dll' could not be found;
Run Code Online (Sandbox Code Playgroud)

问题是,如果我将它设置为2.0它可以工作,但它不能使用LINQ.

现在在其他线程中有解决方案说这是因为DLL不在正确的位置,并提供如下解决方案:

typeof(System.Xml.Linq.Extensions).Assembly.Location
Run Code Online (Sandbox Code Playgroud)

要获取Linq位置的位置,但由于我的程序工作方式,我不知道我可能需要加载哪些DLL.这对于外部库来说不是问题,因为用户需要输入它们的位置,但对于System dlls,我能够使用"System.Linq"或者获取它们的位置"System.Collections"吗?

Jon*_*eet 6

我不知道System.Collections.dllSystem.Linq.dll.大多数LINQ的是System.Core.dll,与集合在mscorlibSystem.dllIIRC.您需要区分命名空间程序集.(您使用using指令导入名称空间,并在项目中添加对程序集的引用.)

您对哪些课程感兴趣?在MSDN中查找它们以查看它们所在的程序集.

  • @Blam:不,因为没有1:1的映射.程序集可以为许多名称空间做出贡献,名称空间可以包含来自许多程序集的类型.它们是正交的概念,只是*经常发生关系. (2认同)