确定特定命名空间的 NuGet 包

Posted

技术标签:

【中文标题】确定特定命名空间的 NuGet 包【英文标题】:Determine the NuGet package for a specific namespace 【发布时间】:2015-06-15 05:01:24 【问题描述】:

一般来说,我们如何确定哪个 NuGet 包将包含特定的命名空间。

用例

我们正在更改一个项目,以便 NuGet 处理大部分(如果不是全部)其引用的程序集。在第一步中,我们删除了*.csproj文件中的所有引用,删除了bin/,删除了现有的packages/packages.config,并删除了项目中的任何*.dll。在第二步中,我们构建了项目并读取了缺少程序集引用的错误列表。一次一个,我们使用 NuGet 添加每个缺失的引用。例如

Install-Package Microsoft.AspNet.Mvc
Install-Package Microsoft.AspNet.Identity.Core
Install-Package EntityFramework
Install-Package Microsoft.AspNet.Identity.EntityFramework
Install-Package Microsoft.Owin
Install-Package Microsoft.AspNet.Web.Optimization
Install-Package Microsoft.AspNet.Identity.Owin
Install-Package Microsoft.Owin.Host.SystemWeb

有时很难确定要安装哪个 NuGet 包。其他时候没有 NuGet 包,我们需要以“老式方式”添加引用。

系统 System.Web Microsoft.CSharp

执行上述操作解决了以下所有错误。不过,这花了一些时间,我想知道下次如何找到合适的 NuGet 包。

命名空间“System”中不存在类型或命名空间名称“Web”(您是否缺少程序集引用?)

找不到类型或命名空间名称“UserManager”(您是否缺少 using 指令或程序集引用?)

找不到类型或命名空间名称“RouteCollection”(您是否缺少 using 指令或程序集引用?)

找不到类型或命名空间名称“RequiredAttribute”(您是否缺少 using 指令或程序集引用?)

找不到类型或命名空间名称“必需”(您是否缺少 using 指令或程序集引用?)

命名空间“Microsoft”中不存在类型或命名空间名称“Owin”(您是否缺少程序集引用?)

找不到类型或命名空间名称“IUserStore”(您是否缺少 using 指令或程序集引用?)

找不到类型或命名空间名称“IOwinContext”(您是否缺少 using 指令或程序集引用?)

找不到类型或命名空间名称“IdentityUser”(您是否缺少 using 指令或程序集引用?)

找不到类型或命名空间名称“Display”(您是否缺少 using 指令或程序集引用?)

找不到类型或命名空间名称“DisplayAttribute”(是否缺少 using 指令或程序集引用?)

找不到类型或命名空间名称“EmailAddress”(您是否缺少 using 指令或程序集引用?)

找不到类型或命名空间名称“EmailAddressAttribute”(您是否缺少 using 指令或程序集引用?)

找不到类型或命名空间名称“HttpPost”(您是否缺少 using 指令或程序集引用?)

找不到类型或命名空间名称“HttpPostAttribute”(您是否缺少 using 指令或程序集引用?)

找不到类型或命名空间名称“IAppBuilder”(您是否缺少 using 指令或程序集引用?)

找不到类型或命名空间名称“IDataProtectionProvider”(您是否缺少 using 指令或程序集引用?)

找不到类型或命名空间名称“IdentityDbContext”(您是否缺少 using 指令或程序集引用?)

找不到类型或命名空间名称“IdentityFactoryOptions”(您是否缺少 using 指令或程序集引用?)

找不到类型或命名空间名称“IdentityResult”(您是否缺少 using 指令或程序集引用?)

找不到类型或命名空间名称“DataTypeAttribute”(是否缺少 using 指令或程序集引用?)

找不到类型或命名空间名称“DataType”(您是否缺少 using 指令或程序集引用?)

命名空间“System”中不存在类型或命名空间名称“Data”(您是否缺少程序集引用?)

找不到类型或命名空间名称“Controller”(您是否缺少 using 指令或程序集引用?)

命名空间“System”中不存在类型或命名空间名称“ComponentModel”(您是否缺少程序集引用?)

找不到类型或命名空间名称“CompareAttribute”(您是否缺少 using 指令或程序集引用?)

命名空间“Microsoft”中不存在类型或命名空间名称“AspNet”(您是否缺少程序集引用?)

找不到类型或命名空间名称“ActionResult”(您是否缺少 using 指令或程序集引用?)

【问题讨论】:

在 MSDN 上可以找到很大比例的此类内容,通常作为搜索类名的*** Google/Bing 结果。例如,ActionResult 告诉您它在 System.Web.Mvc.dll 中。如果您创建一个新的虚拟 VS 2013 ASP.NET 项目,您将获得大量默认 NuGet 包,因此您可以挖掘这些目录,并且很有可能会找到一个包含您的 DLL 的目录寻找。 ReSharper 帮助解决这个问题:jetbrains.com/resharper/help/… 【参考方案1】:

简单地说,没有办法知道...因为没有要求 NuGet 包发布或提及其命名空间。最重要的是,命名空间可以存在于多个程序集中,这意味着同一个命名空间可以存在于多个 NuGet 包中(尤其是在您不知道需要哪个版本的情况下)。

例如,仅仅因为我的 NuGet 包具有 System.Web.MVC 并不意味着它具有您正在寻找的依赖项。

基本上,您必须知道自己需要哪些软件包。这就是 packages.conf 文件的用途。通过删除它,您删除了了解需要哪些程序集和版本所需的信息。

【讨论】:

以上是关于确定特定命名空间的 NuGet 包的主要内容,如果未能解决你的问题,请参考以下文章

面向对象:类的成员---只是特定(类的)命名空间的全局变量(函数)而已

MVC项目中找不到DbContext命名空间

命名空间的定义

创建的 NuGet 包没有任何编译时程序集

第七天

从 .NET 浏览的命名空间列表中删除 MyCompany.Task