从 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 Include
s 到具有Reference Include
s 的包的bin 目录——我应该删除它们吗? (我不完全理解这样做的含义)
我没有任何不正确的引用,所以我不必编辑 .csproj 文件,但是清除 bin 和 packages 文件夹并重建就可以了以上是关于从 Nuget 安装添加对 bin 目录的引用的主要内容,如果未能解决你的问题,请参考以下文章
从 NuGet 安装 NUnit 后,如何强制 TestDriven.Net 使用 NuGet 引用的 NUnit dll?