我有2个项目,一个Portable类库和一个常规单元测试项目。在Portable类库中,我使用NuGet来引用Microsoft.BCL Portability包,它包含2个程序集(System.Threading.Tasks.dll
和System.Runtime.dll
都是v1.5。)
但是,当我尝试在我的单元测试项目中引用这些相同的dll时(使用NuGet并手动浏览到目录\packages\Microsoft.Bcl.1.0.19\lib\portable-net40+sl4+win8+wp71
),visual studio会自动将refence指向位于此处的另一个文件夹中的dll { {1}},版本为4.5。
现在我需要测试的方法接受C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\
作为参数并抛出编译错误:CancellationToken
因为它的v4.5库是引用的而不是v1.5。
然而,我能够为不使用v1.5 BCL库中任何这些功能的方法编写测试。
为什么visual studio用框架附带的库替换我引用的库?我如何告诉visual studio只使用我在特定目录中指向的那些?
使用Visual Studio 2012 Update 2.
答案 0 :(得分:1)
预计对System.Runtime.dll v1.5 / v2.5和System.Threading.Tasks.dll v1.5 / v2.5的引用将替换为.NET Framework 4.5项目平台中的引用。但是,这应该发生在幕后,不应该是可观察的。
我怀疑发生的是您从.NET Framework 4.0测试项目开始并重新定位到.NET Framework 4.5。不幸的是,当发生这种情况时,NuGet不会重新安装软件包以使4.5项目处于正确状态。要尝试解决此问题,请尝试以下操作:
1)卸载Microsoft.Bcl.Async软件包,包括所有项目的所有依赖项 - 您可以通过右键单击Solution Explorer - >来完成此操作。用于解决方案的托管NuGet包
2)在安装了软件包的每个项目中打开任何App.Config,并删除所有引用System.Runtime和System.Threading.Tasks的assemblyBinding条目。
3)确保没有项目引用System.Runtime和System.Threading.Tasks,如果是,则删除引用
4)重新安装软件包
这应该让你处于良好的状态。
请注意,在NuGet 2.7中,这种行为正在得到改善,当你进入这种状态时,他们现在会在重新定位时吐出错误/警告。
答案 1 :(得分:1)
这似乎是visual studio update 2的问题,因为visual studio 2013不会出现这种情况。我在较新版本的visual studio中打开了该项目,并加载了正确的程序集。
我不确定插件是否是导致这种情况的原因。
答案 2 :(得分:0)
有类似的问题(可能会拯救某人沮丧的日子工作) - 原来那个 解决方案中的参考路径(右键单击PROJECT(不是解决方案),然后选择属性。在左侧有项目设置(应用程序,编译,调试,参考等)。
选择“引用”,然后选择“Referenes”网格上方的“Reference Paths”按钮。 如果此处的任何引用指向可以找到OLD DLL的目录,VS(在我的情况下为2013)将从此处选择DLL。
实际上用于解析DLL的路径可以在“references”网格中看到。
删除所有的obsoltete路径,并重新编译。
这也删除了NuGets“无法为'XXYYZZ'生成绑定重定向。已经添加了具有相同键的项目。”
答案 3 :(得分:0)
如果有任何帮助,我想添加一下。
我在Dependencies文件夹中有第三方DLL(版本3.0.120),并在项目中引用了它,并且一切正常。
通过NuGet发布了DLL的新版本。它已安装到:
.. \ packages \ Independentsoft.Exchange.3.0.530 \ Lib \ net45 \
为了使用新的DLL,我删除了旧的引用,清理了项目并添加了新的DLL作为新的引用。
然后我编译并部署了该项目(与SharePoint一起使用),但是代码失败了,并且调试显示即使删除了它,它仍在使用旧的引用。
然后我注意到,在VS中研究新引用的属性时,DLL的版本号始终是旧版本(3.0.120),而不是新版本(3.0.530)。
几个小时后,我删除了Dependencies文件夹中的旧DLL,清理,构建并部署了项目,然后一切正常。
看来,只要项目中存在旧的DLL,VS就会不断将对新版本的所有新引用都指向旧版本。
希望这对某人有帮助。