【问题标题】:Unable to add reference to installed NuGet package?无法添加对已安装 NuGet 包的引用?
【发布时间】:2018-05-30 18:43:21
【问题描述】:

我创建了一个 NuGet 包,并且能够在另一个 .NET 解决方案中成功安装它。但我无法从其他 .NET 解决方案中添加对 NuGet 包的引用。

例如,NuGet 包有一个类,其命名空间类似于MyCorp.SecurityApi。我目前无法在我的其他 .NET 解决方案中为该命名空间添加 using 指令。例如,using MyCorp.SecurityApi 指令返回此编译错误:

找不到类型或命名空间“MyCorp”

知道问题可能是什么或如何调试它吗?

【问题讨论】:

  • 确保将其作为参考添加到您的解决方案资源管理器中
  • 谢谢 tj。 nuget 包参考显示为安装在 nuget 包管理器中,但它没有像您提到的那样显示为项目参考。知道问题可能是什么或如何调试?
  • 右键单击引用 -> 添加引用:然后检查您的包的列表。它可能只是没有自动检查它。
  • 我刚刚尝试了手动“添加参考”,但没有看到列出的 nuget 包程序集。似乎我的 nuget 包的配置方式可能存在更大的问题。知道我应该寻找什么或可能导致这种断开连接的原因吗?
  • 你的包的目标框架版本是什么?它是否与不会安装的解决方案/项目的框架版本相匹配?它安装的解决方案/项目怎么样?

标签: c# .net nuget nuget-package


【解决方案1】:

我会先尝试做一个

Update-Package -Id <package_name> –reinstall

如 Mikaal 的回答中所述。

但在某些情况下,这也可能会失败,因为 packages 文件夹已损坏。根据平台的不同,它位于不同的路径中:

  • .NET 中,可以在项目目录中找到此文件夹(通常与解决方案文件 *.sln 所在的文件夹相同)。

  • .NET Core 中,您可以通过将以下行粘贴到文件资源管理器的路径中找到它(通过 WIN + E 打开它,然后将上面的行粘贴到路径文本框中):

    %appdata%\..\..\.nuget\packages\

在那里,尝试找到包并删除文件夹及其内容。你也可以找到路径,如果你去Visual Studio中的依赖项,包,右键单击包并复制属性窗口的路径。请注意,您可能需要在删除之前关闭 Visual Studio,因为文件可能已被锁定。

重要提示:确认它在 Visual Studio(依赖项)中不再被引用。如果是,请删除所有依赖项。

最后,打开包管理器并添加包(即右键单击项目,选择“管理NUGET包...”,切换到浏览选项卡,选择包并单击安装)。

【讨论】:

    【解决方案2】:

    确保在解决方案资源管理器中仔细检查“命名空间”名称和“引用”,无论它是否存在。如果不是,您应该考虑重新安装。在 Nuget 包管理器控制台中使用以下命令:

    Update-Package -Id <package_name> –reinstall
    

    或者这样限制重新安装到特定项目:

    Update-Package <package_name> -ProjectName MyProject -reinstall
    

    如果您仍然无法这样做,请尝试手动将相关的 .dll 添加到您的项目中,看看它是否正常工作。如果确实如此,则很可能问题出在该 nuget 包的配置上,在这种情况下,我建议您检查这些 docs 并缩小问题范围。

    【讨论】:

      【解决方案3】:

      问题可能是由于:

      • nuget 包 (MyCorp.SecurityApi) 的目标框架和尝试使用它的应用程序不兼容
      • 不兼容的平台架构(即,如果 MyCorp.SecurityApi 仅为 x64,则不能用于构建 x86 应用程序)
      • 某些类的可见性,即如果类是内部的,则它不能仅用于 MyCorp.SecurityApi 程序集,也不能用于其他程序集 - 您的应用程序)。

      建议你检查一下上面提到的原因,希望对你有帮助

      【讨论】:

        【解决方案4】:

        这是我创建的第一个 NuGet 包。我发现了这个问题,并将其发布给其他 NuGet 新手。在“NuGet 包资源管理器”中:

        1. 内容 > 添加 > Lib 文件夹
        2. 右键单击“lib”文件夹并选择“添加现有文件...”
        3. 在选择文件对话框中,选择源解决方案的 bin\obj 中的所有文件

        我的 NuGet 包现在会在安装后显示在项目引用中。这里有没有其他人有任何其他提示来优化这个过程?

        【讨论】:

        • 如果您从 Visual Studio 解决方案创建 NuGet 包,您可以在包管理器控制台中发出“NuGet pack”命令(“工具”->“NuGet 包管理器”->“包管理器控制台” ')。这是假设您已经创建了一个 NuGet 规范文件。如果您没有 NuGet 规范文件,则必须先创建该文件。可以通过在包管理器控制台中发出“NuGet 规范”来生成模板。 NuGet 包将自动为 NuGet 包本身创建必要的文件夹结构。
        • 谢谢巴里。为了在 PM 控制台中执行“NuGet 规范”,我需要安装或配置什么? cmd 似乎在 VS2017 中默认不可用,我尝试安装 NuGet.VisualStudio 希望这会有所帮助,但我仍然在 PM 控制台中遇到相同的错误:“Nuget :术语'NuGet'未被识别为名称cmdlet、函数、脚本文件或可运行的程序。”
        • 所以在包管理器控制台中你可以调用命令行工具,比如DOS命令。如果您打算调用“NuGet 规范”,则与调用“NuGet.exe 规范”相同。这意味着可执行 NuGet.exe 需要位于当前工作目录或系统路径中。您也可以使用完全限定的路径来调用它 - 如 'c:\whatever\mypath\NuGet.exe spec'。您可能需要在系统中搜索 NuGet.exe 的副本。我通常会从 Microsoft 寻找最新版本并复制到知名位置,以简化查找程序...
        • 你会认为微软会在系统路径中安装 NuGet.exe,或者至少更新路径以包含 NuGet.exe,但可惜他们没有。这意味着当工作目录是当前项目的工作目录时,有时无法在包管理器控制台中找到 NuGet.exe。您可以编辑系统路径变量以包含 NuGet.exe 所在的文件夹,以使其在任何项目的包管理器控制台中可用。请注意,Microsoft 喜欢下载 NuGet.exe 程序的许多副本,并且每个副本可能是不同的版本 - 所以要小心...
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-17
        • 2020-03-11
        • 2018-12-26
        • 1970-01-01
        • 2019-04-15
        相关资源
        最近更新 更多