【问题标题】:Dll referencing in CSharpCodeProvider only works when it's set to .NET 2.0?CSharpCodeProvider 中的 Dll 引用仅在设置为 .NET 2.0 时才有效?
【发布时间】:2023-03-07 21:11:02
【问题描述】:

当我将 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;

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

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

typeof(System.Xml.Linq.Extensions).Assembly.Location

要获取 Linq 位置的位置,但由于我的程序的工作方式,我不知道我可能需要加载哪些 DLL。这对于外部库来说不是问题,因为用户无论如何都需要输入它们的位置,但是对于系统 dll,我是否能够仅使用 "System.Linq""System.Collections" 获取它们的位置?

【问题讨论】:

    标签: c# .net dll .net-3.5 csharpcodeprovider


    【解决方案1】:

    我不知道System.Collections.dllSystem.Linq.dll。大部分 LINQ 位于 System.Core.dll,集合位于 mscorlibSystem.dll IIRC。您需要区分命名空间程序集。 (您使用using 指令来导入命名空间,并在项目中添加对程序集的引用。)

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

    【讨论】:

    • 哦,我真傻。是否有使用内置方法或反射在标准.NET 程序集中查找名称空间的程序集?例如从System.LinqSystem.Core.dll
    • @Blam:不,因为没有 1:1 的映射。一个程序集可以为许多命名空间做出贡献,一个命名空间可以包含来自许多程序集的类型。它们是正交的概念,只是碰巧经常有关系。
    猜你喜欢
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多