c# - 从 Nuget 安装会添加对 bin 目录的引用

标签 c# asp.net-mvc visual-studio nuget package

我正在使用 Nuget 包管理器安装 AvsAn (2.1.0) 包。我期望引用路径是包目录,类似于:

C:\app\packages\AvsAn.dll

但是添加了对bin目录的引用:

C:\app\NameSpace\bin\AvsAn.dll

令人困惑的是,某些包会发生这种情况,但其他包不会发生这种情况(即引用路径是 packages 文件夹,正如预期的那样)

我尝试过的

  • 卸载并重新安装包
  • 谷歌搜索类似的东西(我一直找不到任何东西)

最佳答案

我们发现同一解决方案中的不同项目使用的是彼此不同的版本。此外,单个项目的版本可能在 <Reference> 中列出。 HintPath 中列出的版本中的元素.

我们只是浏览了每个 .csproj 文件并手动编辑它们以使所有内容同步。

  • 找到以<Reference 开头的行其中包括相关 dll 的信息。
  • 这一行应该指明一个版本。例如:<Reference Include="SomeAssembly, Version=4.0.54"> . 此后可能会有一些附加文本,例如 Culture和/或 PublicKey等。我们只对 Version 属性感兴趣。
  • 记下此版本。
  • 现在检查 <HintPath> <Reference 中的元素,它将包含 VS 期望的那个 dll 的路径(VS 将首先查找的位置)。
  • 此路径还将包含一个版本 ..\packages\SomePackage.4.0.56\lib\net45\SomeAssembly.dll (例如 - 在我们的例子中是服务堆栈包)。虽然这在技术上不是版本(它只是系统上文件的路径),但它通常对应于 dll 的版本。
  • 您需要确保这两件事是同步的 - 列出的路径实际存在并且它指向预期的 dll。

在我们的例子中,我们从 ServiceStack 4.0.54 迁移到 4.0.56。一些 Include引用是 4.0.56,而路径仍然指向 4.0.54 版本。因为提示路径没有指向预期的 dll VS 在别处查找并且它在项目的 \bin\debug 中找到了它认为是可接受的匹配项。目录。这不是正确的版本。

改什么,改什么,看你的具体情况。

这很可能是由于合并不当造成的。


另外我们清除了 \bin\packages项目文件夹下的目录。重新加载解决方案并让 Nuget 恢复。这只是为了清除问题,以便 Nuget 可以只下载它需要的包及其版本。并且它可以防止 VS 使用可能位于项目的 \bin 中的错误版本。目录。两者都可以安全删除。 \packages文件夹将通过 Nuget 恢复器重新创建和填充,\bin目录将在下一次构建解决方案时重新创建和填充。

关于c# - 从 Nuget 安装会添加对 bin 目录的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37111837/

相关文章:

c# - 消除命令提示符窗口 (WinForms)

css - 复选框顶部居中标签

visual-studio - 在 Visual Studio 2008 中为自定义构建步骤设置工作目录

.net - 无法在 Visual Studio 2012 的 .NET 4.0 应用程序上使用 ClickOnce 发布

asp.net - HTTP 错误 404.3-未在 IIS 10 中找到

c# - 尝试绘制波形但不绘制任何数据

c# - 如何在 case 语句中使用范围 C#

c# - 应该多久关闭/打开一次连接?

c# - @Html.ValidationMessageFor 没有按预期工作

c# - 使用 ASP.NET 5 ( MVC 6 ) 的 N 层架构