【问题标题】:Nuget does not update Package References in ASP.NET websiteNuget 不更新 ASP.NET 网站中的包引用
【发布时间】:2016-09-01 14:18:18
【问题描述】:

关于:我有一个 ASP.NET 网站(不是 Web 项目),解决方案中有 3 个类库项目。之前我使用 SVN,但现在使用 Git 进行源代码管理。我已经在计算机(用作服务器)上本地安装了 git,并使用它来合并其他开发人员的源代码。另外,我正在使用 Visual Studio 2015 社区版,它提供了使用 git 的工具。

问题:从主存储库克隆项目后,我构建项目以运行它。构建项目会显示一个对话框,显示“Package Restore is in progress”。此过程创建一个名为“Packages”的文件夹,该文件夹包括 packages.config 文件中列出的每个包。但恢复完成后,项目抛出如下异常:

每个包都会显示此异常(此处为 Autofac)。

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

解决方法 为了解决这个问题,我需要卸载每个包并重新安装它,问题就解决了。这件事我需要为每台开发者机器一次又一次地做,这既令人沮丧又耗时。

有没有人在 ASP.NET 中使用 Nuget、git 和网站时遇到过同样的问题。

【问题讨论】:

  • Git repo 中是否存在 Autofac 包?意思是,你能看到包被添加了吗
  • git repo 中没有添加包。该项目有 package.config 文件。我使用默认的 Visual Studio git 设置,它不会在主 git 存储库中添加包文件夹。另外,在系统上克隆时,我在网站上看不到 bin 文件夹。
  • 好的,package.config文件引用的Autofac版本是否存在?
  • 从服务器克隆项目后,没有packages文件夹。当我开始调试时,它会显示一个对话框,上面写着“正在恢复包”。它确实创建了一个文件夹,并且在此过程之后有包。但是包还原完成后出现参考错误。问题是 nuget 没有在解决方案引用中添加/更新引用。它不会在“属性页 -> 引用列表”中显示包引用。手动添加包引用也可以,但我想知道它为什么不能工作,因为在开源项目中它工作得很好。

标签: asp.net git version-control nuget nuget-package-restore


【解决方案1】:

我以前遇到过这样的问题。就我而言,原因是我更改了项目路径(将项目移动到另一个目录),并且包目录(包含 NuGet 包)的路径存储在旧路径的 csproj 文件中,即 VS无法还原 NuGet 包。解决方案是手动编辑 csproj 并使其引用正确的新包路径。

如果这对您不起作用,您仍然可以使用您的解决方法,但为简单起见,请使用以下 PowerShell 命令(在 NuGet 控制台中):

Update-Package -reinstall -Project Your.Project.Name

注意:项目名称不包含 csproj 扩展名,仅包含项目名称

【讨论】:

    【解决方案2】:

    最好不要将第三方软件包放入源代码管理中。它会使您的存储库膨胀(即使在大型 Web 应用程序上,外部包的大小也会大大超出您的代码的重量)。

    如果 NuGet 包恢复速度很慢,您可以考虑使用本地缓存(这可以像共享文件夹一样简单)或更好的互联网连接。

    也就是说,每台机器应该只遇到一次这个问题。在下载包的同时,您可以向新团队成员提供设计概览……

    【讨论】:

    • 感谢您的回复,但我想,我无法正确提出我的问题。我每次安装包都没有问题。当我在其他机器上设置项目时,包安装完成后项目没有构建。它会为每个包抛出异常,我目前使用的解决方法是再次重新安装所有包。
    • @vivek 请在问题中添加错误的详细信息(请包含完整的错误文本,而不是摘要)。
    • 嗨@Richard,我添加了异常详细信息。请检查。
    【解决方案3】:

    确保您的所有项目都使用相同的目标框架,如果不这样做,您通常可以获得 type or namespace [name] could not be found 警告。

    为此,请右键单击解决方案资源管理器中的每个项目 > 属性 > 应用程序选项卡 > 目标框架。它们都应该相同,否则项目中的引用之间将不兼容。 Here's 一个关于此的问题,希望对您有所帮助。

    【讨论】:

    • 谢谢,但这不是框架版本问题。这与 git 和 .sln 或 .csproj 文件引用处理有关。
    【解决方案4】:

    主要原因是 packages.config 文件中没有 Autofac 引用。 当您在屏幕上看到“恢复包”消息框时,这意味着 nuget 包管理器正在尝试安装包文件夹中缺少的所有包。 尝试执行此步骤:

    • 在 Visual Studio 解决方案资源管理器中选择项目,然后通过上下文菜单选择卸载项目
    • 通过上下文菜单卸载项目后选择编辑您的项目
    • 转到部分组并找到 Autofac 参考部分
    • 如果 HintPath 看起来不像 ..\packages\Autofac.4.1.1\lib\net45\Autofac.dll(实际适用于 4.1.1 版本)删除 Autofac 参考项
    • 保存 csproj 文件并重新加载项目
    • 通过 NuGet 包管理器安装 Autofac
    • 提交更改并将其推送到 git 存储库

    【讨论】:

      【解决方案5】:

      在 VS 2019 中遇到了同样的问题。在 ASP.NET 中,包是通过出现在您的 bin 文件夹中的 .refresh 文件更新的。如果这些没有被签入 Git,它们就不会被复制到你的克隆复制品中。

      我为我的所有包 dll 添加了 .refresh 文件,确保 .refresh 文件中的版本和路径正确,现在一切都按预期更新了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-25
        • 2015-12-11
        相关资源
        最近更新 更多