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



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



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

我试过的

  • 卸载重装包
  • 谷歌搜索类似的东西(我一直找不到任何东西)
  • 最佳答案

    我们发现同一解决方案中的不同项目使用彼此不同的版本。此外,单个项目可能具有 <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/

    10-13 03:18
    查看更多