我正在使用Nuget包管理器安装AvsAn
(2.1.0)包。我期待引用路径是package目录,如:
C:\应用\包\ AvsAn.dll
但是添加了对bin目录的引用:
C:\应用\名称空间\ BIN \ AvsAn.dll
令人困惑的是,某些软件包发生了这种情况,但其他软件包却没有(例如,引用路径是package文件夹,正如预期的那样)
答案 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的版本。 在我们的案例中,我们从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
目录。