簡體   English   中英

System.web.mvc 丟失

[英]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

在安裝了 MVC 3 的系統中,在哪里可以找到 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM