总结:我在解决方案中有一个项目,我不能指向WebPages 3.0(或Helpers 3.0)。其他的都很好,但只是立即解析为Program Files x86 2.0程序集。
背景:我有一个我继承的MVC应用程序。我已经做了一些更新,在最后一次迭代中将它提升到MVC-3。为了切入追逐,我发现自己处于一种意想不到的束缚中,似乎在我的尝试修复中滚雪球。
我一直致力于二进制部署,无需在构建服务器和Web服务器上安装软件包。因此,我在解决方案树中有MVC / ASP.Net WePage二进制文件,并引用了这些本地副本。
我改变了什么:信不信由你,我从未和NU GET搞砸过,并决定给它一个旋转。我删除了所有本地二进制文件(2x,3x,100x检查以确保)并添加了MVC 5及其依赖项。这看起来很棒,因为我可以消除我自己开发的二进制模式,而不是存储在磁盘/ TFS上的解决方案树下的软件包。我还想我也可以将所有项目都指向最新的4.5 FW。
问题:在编译VS时抱怨我有上述DLL的v2和v3,但我没有引用v2。此外,在编译之前,如果我删除引用并重新添加它(指向包lib内容),它会立即以v2.0的形式出现,并且已解析的文件夹是x86 v2实例。
在尝试解决这个问题时,我已经删除了这些软件包并重新安装了几次,但无济于事。
我也尝试过向we.config添加绑定重定向,但我怀疑这是运行时的事情?我在这个解决方案中有很多其他项目,所有项目都很好,指向3.0!
我用反射器来查看bin文件夹中所有程序集的引用,以为我会找到指向页面2.0的东西,但我没有。
查看csproj文件,我在Include中看到硬编码为2.0的版本。我将其更改为3.0,当我重新加载解决方案时,它又恢复为2.0。哎呀!
我关闭并重新加载解决方案一百次。我已经清理了1000次。我已多次手动删除obj / bin文件夹。
我只是不知道如何调试这个!
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly
<Reference Include="System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<Private>True</Private>
<HintPath>..\..\packages\Microsoft.AspNet.WebPages.3.0.0\lib\net45\System.Web.Helpers.dll</HintPath>
</Reference>
答案 0 :(得分:1)
我在csproj中为WebPages和Helpers找到了第二个Include!我不知道他们是如何到达那里的。卸载NUGET包将删除FIRST引用,但不会删除第二个引用。为了增加挫败感,第二个引用没有指定任何版本或位置。使用GAC版本立即覆盖添加版本和位置特定的引用(NUGET或手动)!