C# 无法添加对已安装NuGet软件包的引用?

C# 无法添加对已安装NuGet软件包的引用?,c#,.net,nuget,nuget-package,C#,.net,Nuget,Nuget Package,我创建了一个NuGet软件包,并成功地将其安装到另一个.NET解决方案中。但是我无法从另一个.NET解决方案添加对NuGet包的引用 例如,NuGet包有一个命名空间类似于MyCorp.SecurityApi的类。我目前无法在另一个.NET解决方案中为该命名空间添加using指令。例如,使用MyCorp.SecurityApi指令返回此编译错误: 找不到类型或命名空间“MyCorp” 知道问题是什么或如何调试它吗?确保在解决方案资源管理器中用“引用”仔细检查“名称空间”名称,无论它是否存在。如果

我创建了一个NuGet软件包,并成功地将其安装到另一个.NET解决方案中。但是我无法从另一个.NET解决方案添加对NuGet包的引用

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

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


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

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

Update-Package -Id <package_name> –reinstall
更新软件包-Id–重新安装
或将重新安装仅限于特定项目:

Update-Package <package_name> -ProjectName MyProject -reinstall
更新包-ProjectName MyProject-重新安装

如果您仍然无法做到这一点,请尝试手动将相关的.dll添加到项目中,看看它是否正常工作。如果确实如此,那么问题很可能在于nuget包的配置,在这种情况下,我建议您仔细阅读这些内容并缩小问题范围。

这是我创建的第一个nuget包。我发现了这个问题,我把这个贴在其他NuGet新手的博客上。在“NuGet包资源管理器”中:

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

  • 我的NuGet软件包现在在安装后显示在项目引用中。这里的其他人有没有其他优化此过程的建议?

    我会首先尝试做一个

    Update-Package -Id <package_name> –reinstall
    
    更新软件包-Id–重新安装
    
    正如米卡尔在回答中所解释的那样

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

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

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

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

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


    删除它后,请确保它不再在Visual Studio中被引用(依赖项)。然后,打开软件包管理器并添加软件包(即,右键单击项目,选择“管理NUGET软件包…”,然后切换到浏览选项卡,选择软件包并单击安装)。

    问题可能是由于:

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

    我建议您检查上述原因,希望它对您有所帮助

    确保它已添加到您的解决方案探索者Hanks tj中作为参考。nuget软件包参考显示为已安装在nuget软件包管理器中,但它没有显示为您提到的项目参考。知道问题可能是什么或者如何调试吗?右键单击引用->添加引用:然后为您的包检查该列表。它可能只是没有自动检查。我只是尝试了手动“添加引用”,但没有看到列出的nuget包程序集。似乎我的nuget包的配置方式可能存在更大的问题。你知道我应该寻找什么或者是什么导致了这种断开吗?你的包的目标框架版本是什么?它是否与不安装的解决方案/项目的框架版本匹配?安装它的解决方案/项目如何?如果您正在从Visual Studio解决方案创建NuGet包,则可以在包管理器控制台(“工具”->“NuGet包管理器”->“包管理器控制台”)中发出“NuGet包”命令。这是假设您已经创建了一个NuGet spec文件。如果没有NuGet spec文件,则必须首先创建该文件。可以通过在PackageManager控制台中发出“NuGet spec”来生成模板。NuGet pack将自动为NuGet软件包本身创建必要的文件夹结构。谢谢barry。为了在PM控制台中执行“NuGet spec”,我需要安装或配置什么?在VS2017中,cmd在默认情况下似乎不可用,我尝试安装NuGet.VisualStudio,希望这会有所帮助,但我在PM控制台中仍然收到相同的错误:“NuGet:术语‘NuGet’不被识别为cmdlet、函数、脚本文件或可操作程序的名称。”因此,在PackageManager控制台中,您可以调用命令行工具,如DOS命令。如果要调用“NuGet spec”,则与调用“NuGet.exe spec”相同。这意味着可执行文件NuGet.exe需要位于当前工作目录或系统路径中。您也可以使用完全限定路径调用它,如“c:\whatever\mypath\NuGet.exe spec”。您可能需要在系统中搜索NuGet.exe的副本。我通常看到