从 Nuget 安装添加对 bin 目录的引用

Posted

技术标签:

【中文标题】从 Nuget 安装添加对 bin 目录的引用【英文标题】:Installing from Nuget adds reference to bin directory 【发布时间】:2016-09-03 20:32:57 【问题描述】:

我正在使用 Nuget 包管理器安装 AvsAn (2.1.0) 包。我希望参考路径是包目录,例如:

C:\app\packages\AvsAn.dll

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

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

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

我尝试过的

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

【问题讨论】:

我在一个项目中的所有包中都看到了它,而其他项目中的相同包(都在同一个解决方案中)正在使用“正确”的包路径。 不确定这是否是一个答案。我得到了我们的固定编辑 csproj 文件。我们有一些混在一起的版本。不同的项目使用不同的版本。引用的版本与路径中列出的版本不同等等。所以我只是打开所有并清理它们是相同的。 @DavidMartin 成功了!我注释掉了 .csproj 文件中的所有 Content Include 和 Reference Include 引用,下次我添加包时,它添加了正确的路径。是否愿意将此作为答案发布,以便我接受? 【参考方案1】:

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

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

找到以<Reference 开头的包含相关dll 信息的行。 此行应指示版本。例如:<Reference Include="SomeAssembly, Version=4.0.54">这之后可能会有一些额外的文本,例如Culture 和/或PublicKey 等。我们只对Version 属性感兴趣。 记下此版本。 现在检查<Reference 中的<HintPath>元素,它将包含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 目录将在解决方案的下一次构建时重新创建和填充。

【讨论】:

您能否再解释一下 - 我是否应该删除所有看起来像这样的 bin 引用:<Content Include="bin\AvsAn.dll" />。另外,我是否应该离开Reference Include,例如:<HintPath>..\packages\AvsAn.2.1.0.0\lib\net20\AvsAn.dll</HintPath> 我不确定您的意思是什么,您手动编辑它们以使所有内容同步 - 请您更详细地解释一下吗? 感谢您花时间解释您的意思。我有一个问题——我正在研究的解决方案有Content Includes 到具有Reference Includes 的包的bin 目录——我应该删除它们吗? (我不完全理解这样做的含义) 我没有任何不正确的引用,所以我不必编辑 .csproj 文件,但是清除 bin 和 packages 文件夹并重建就可以了

以上是关于从 Nuget 安装添加对 bin 目录的引用的主要内容,如果未能解决你的问题,请参考以下文章

从 NuGet 安装 NUnit 后,如何强制 TestDriven.Net 使用 NuGet 引用的 NUnit dll?

恢复 Nuget 引用?

Visual Studio 无法识别已安装 NuGet 包的头文件

手动删除引用nuget如何还原

创建大量非必需项目引用的NuGet包

错误目录结构中的 NuGet 引用