2013-10-31 25 views
3

摘要:我有一個解決方案中的項目,我無法指向WebPages 3.0(或Helpers 3.0)。其他的都很好,但是立即解決了Program Files x86 2.0程序集。添加對System.Web.WebPages的引用3.0立即更改爲2.0

背景:我有一個我繼承的MVC應用程序。我已經做了一些更新,在最後一次迭代中將它提升爲MVC-3。爲了開始追逐,我發現自己處於意想不到的束縛之中,似乎通過我的嘗試修復雪球。

我一直在努力實現二進制部署,無需在構建服務器和Web服務器上安裝軟件包。因此,我在解決方案樹中使用了MVC/ASP.Net WePage二進制文件,並引用了這些本地副本。

我改變了什麼:信不信由你,我從來沒有和NU GET搞混,並決定給它一個旋風。我刪除了所有本地二進制文件(2倍,3倍,100倍檢查以確保)並添加了MVC 5及其依賴項。這看起來很棒,因爲我可以刪除我自己生成的二進制模式,以支持存儲在磁盤/ TFS上的解決方案樹下的軟件包。我也想到我可能會把所有的項目都指向最新的4.5 FW。

問題:關於編譯VS正在抱怨我有v2和v3的提到的DLL,但我沒有提及v2。另外,在編譯之前,如果我刪除引用並重新添加引用(指向包lib內容),它將立即以v2.0形式出現,並且解析的文件夾是x86 v2實例。

雖然試圖解決這個問題,我已經刪除了包並重新安裝了幾次,但無濟於事。

我也嘗試添加綁定重定向到we.config,但我懷疑這是一個運行時的東西?我在這個解決方案中有許多其他項目,所有這些都很好,指向3.0!

我已經使用反射器來查看bin文件夾中所有程序集的引用,認爲我會找到指向頁面2.0的東西,但我不知道。

尋找csproj文件,我看到在包含中硬編碼爲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> 

Reference showing 2.0 resolution

回答

1

我發現,在對的csproj網頁和助手第二包含!我不知道他們是如何到達那裏的。卸載NUGET軟件包將刪除FIRST引用,但不會刪除第二個引用。爲了增加挫折感,第二個參考沒有指定版本或位置。使用GAC版本立即覆蓋版本和位置特定參考(NUGET或手動)!