![](/img/trans.png)
[英]System.Web.Mvc missing reference to ModelClientValidationRule
[英]System.web.mvc missing
自上周的安全更新以來,我們有一個在 VS2010 中構建的舊 ASP.NET MVC 3 Web 應用程序,該應用程序無法編譯。
問題是對 System.Web.Mvc.dll 的引用已損壞。
當我在未運行安全更新的構建機器上打開解決方案文件並打開 References->System.Web.MVC 的屬性對話框時,它看起來很好。
路徑是 C:\\Program Files\\Microsoft ASP.NET\\ASP.NET MVC 3\\Assemblies\\System.Web.Mvc.dll 版本是 3.0.0.0
但是當我在運行安全更新的開發機器上打開解決方案文件時,References->System.Web.MVC 被標記為丟失。 如果我刪除它,並嘗試使用 VS2010 的“添加引用”對話框將其添加回來,它不會顯示。
在網上閑逛讓我建議使用 NuGet 更新 MVC。 我們在 VS2010 項目中沒有使用 NuGet,因此對於這種情況,這似乎不太正確。 無論如何,我嘗試了它,最終丟失了六個參考文獻。
當我在 Windows 資源管理器中查看“C:\\Program Files\\Microsoft ASP.NET\\ASP.NET MVC 3\\Assemblies\\System.Web.Mvc.dll”的屬性時,在構建機器上我看到了 3.0.0.0 版。
當我查看開發機器上的屬性時,我看到版本 3.0.50813.1。
我需要的是一種改變我構建和運行方式的方法,這樣無論.NET 3.0 框架中安裝了這兩個DLL 中的哪一個,我都可以構建和運行。
想法?
第一次嘗試 - 如果缺少程序集,請添加它。 我刪除了舊的缺失參考。 然后我將 DLL 從“ASP.NET MVC3\\Assemblies”文件夾復制到我項目中的一個文件夾中。 將其設置為“始終復制”,並將其添加為參考。
這樣,該項目將在 VS2010 中編譯,但是當我嘗試使用 aspnet_compiler 預編譯頁面時,我收到警告:
(0): warning CS1702: Assuming assembly reference 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' matches 'System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35', you may need to supply runtime policy
到目前為止,我已經能夠設法避免理解運行時策略,但我嘗試在 web.config 中添加它:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.1" />
</dependentAssembly>
</assemblyBinding>
</runtime>
再次嘗試,並得到相同的警告。
我的問題是 - 我還有問題嗎? 還是我會解決它,盡管有警告?
通過 NuGet 獲取最新版本的 MVC3。 在 Dev Studio 中打開您的項目。 打開 Dev Studio 底部的 Package Manager Console 選項卡。 然后使用這個命令:
PM> Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1
如果單擊“-Version”后的 Tab 鍵,您將獲得所有可用版本的列表。
如果您使用的是舊版本的 NuGet,您可能會收到一條錯誤消息,指示您必須升級它。 如果是這樣,打開工具->擴展管理器安裝最新版本的 NuGet。 請注意,您需要以管理員身份運行 Dev Studio,然后才能安裝 NuGet。
安裝 MVC3 應更新項目中的 Web.config。
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-3.0.0.1" newVersion="3.0.0.1" />
</dependentAssembly>
</assemblyBinding>
MVC 5
C:\\Program Files (x86)\\Microsoft ASP.NET\\ASP.NET Web Stack 5\\Packages\\Microsoft.AspNet.Mvc.5.0.0\\lib\\net45\\System.Web.Mvc.dll
MVC 4
C:\\Program Files (x86)\\Microsoft ASP.NET\\ASP.NET MVC 4\\Assemblies\\System.Web.Mvc.dll
MVC 3
C:\\Program Files (x86)\\Microsoft ASP.NET\\ASP.NET MVC 3\\Assemblies\\System.Web.Mvc.dll
MVC 2
C:\\Program Files (x86)\\Microsoft ASP.NET\\ASP.NET MVC 2\\Assemblies\\System.Web.Mvc.dll
解決此問題的最簡單方法是從 Web 平台安裝程序安裝 ASP.NET MVC 3。
http://www.microsoft.com/web/downloads/
或者使用 Nuget 命令
Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1
在 VS 2017 中,我清理了解決方案並重建了它並修復了它
我有同樣的情況:Visual Studio 2010,未安裝 NuGet,以及使用 System.Web.Mvc 版本 3 的 ASP.NET 應用程序。
對我有用的是設置每個使用 System.Web.Mvc 的 C# 項目,轉到解決方案資源管理器中的引用,並在 System.Web.Mvc 上設置屬性,復制本地為 true,特定版本為 false -最后一個導致版本字段顯示該機器上的當前版本。
以防萬一有人是他得到同樣錯誤的位置。 在我的情況下,降級 Microsoft.AspNet.Mvc 然后再次升級它有幫助。 安裝 Glimpse 並將其刪除后,我遇到了這個問題。 System.Web.Mvc 以某種方式引用錯誤,清理解決方案或重建它在我的情況下不起作用。 如果以上答案都不適合您,請嘗試一下。
在 vs2017 中有這個問題,我已經通過 nuget 獲得了 MVC,但是 System.Web.Mvc 沒有出現在“添加引用”下的“程序集”列表中。
解決方案是在“添加引用”對話框中的“程序集”下選擇“擴展”。
就我而言,我的項目中有所有正確的引用。 我發現通過構建解決方案,nuget 包會自動恢復。
在 vs2015 中打開的示例 mvcmusicstore.codeplex.com 遺漏了一些引用,其中之一是 System.web.mvc。
對此的修復是從引用中刪除它並添加一個引用:在程序集下選擇擴展,您可以在那里找到並添加 System.Web.Mvc。
(我用 nuget 包添加的其他程序集。)
從 ./packages/Microsoft.AspNet.Mvc.[version]/lib/net45/System.Web.Mvc.dll 再次添加引用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.