我正在使用 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/