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

时间:2016-05-09 09:13:19

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

我正在使用Nuget包管理器安装AvsAn(2.1.0)包。我期待引用路径是package目录,如:

  

C:\应用\包\ AvsAn.dll

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

  

C:\应用\名称空间\ BIN \ AvsAn.dll

令人困惑的是,某些软件包发生了这种情况,但其他软件包却没有(例如,引用路径是package文件夹,正如预期的那样)

我尝试了什么

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

1 个答案:

答案 0 :(得分:5)

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

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

  • 找到以<Reference开头的行,其中包含相关dll的信息。
  • 此行应指明版本。例如:<Reference Include="SomeAssembly, Version=4.0.54">此后可能会有一些其他文字,例如Culture和/或PublicKey等。我们只对版本属性感兴趣。
  • 记下此版本。
  • 现在检查<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目录中的错误版本。两者都可以安全删除。将通过Nuget restor重新创建并填充\packages文件夹,并在下一次构建解决方案时重新创建并填充\bin目录。