System.web.mvc відсутній


89

У нас є стара веб-програма ASP.NET MVC 3, побудована у VS2010, яку не вдається скомпілювати з моменту оновлення системи безпеки минулого тижня.

Проблема полягає в тому, що посилання на System.Web.Mvc.dll порушено.

Коли я відкриваю файл рішення на нашій машині збірки, де оновлення системи безпеки не запускалось, і відкриваю діалогове вікно властивостей Посилання-> System.Web.MVC, це виглядає чудово.

Шлях - C: \ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll Версія 3.0.0.0

Але коли я відкриваю файл рішення на машині розробника, де запущено оновлення безпеки, посилання-> System.Web.MVC позначено як відсутні. Якщо я видалю його та спробую додати назад за допомогою діалогового вікна Додати посилання VS2010, воно не відображається.

Блукання по Інтернету привело мене до пропозицій щодо оновлення MVC за допомогою NuGet. Ми не використовували NuGet у наших проектах VS2010, тому це здається не зовсім правильним для цієї ситуації. Я все-таки спробував і в підсумку отримав півдюжини відсутніх посилань.

Коли я переглядаю властивості "C: \ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll" у Провіднику Windows, на машині збірки я бачу версію 3.0.0.0.

Коли я розглядаю властивості машини розробника, я бачу версію 3.0.50813.1.

Мені потрібен спосіб змінити спосіб створення та запуску, щоб я міг створювати та запускати незалежно від того, яка з цих двох бібліотек DLL встановлена ​​в .NET 3.0.

Ідеї?

Те, що я спробував, не спрацювало

Перша спроба - якщо збірка відсутня, додайте її. Я видалив старе відсутнє посилання. Потім я скопіював 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-пакети до останньої версії (де це можливо, звичайно)?
Silvermind


1
У веб-програмі немає жодних пакунків nuget. І так, це помилка MS14-059.
Джефф Деге,

У мене виглядає та сама проблема, хоча я замість цього використовую пакет nuget та версію 4. Він чудово компілюється, і все працює, але є ці 20+ попереджень щодо компіляції, від яких я хотів би позбутися.
Farinha

Відповіді:


141

Отримайте останню версію MVC3 через NuGet. Відкрийте свій проект у Dev Studio. Відкрийте вкладку Консоль диспетчера пакетів внизу Dev Studio. Потім скористайтеся цією командою:

PM> Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1

Якщо натиснути клавішу табуляції після "-Version", ви отримаєте список усіх доступних версій.

Якщо у вас є стара версія NuGet, ви можете отримати повідомлення про те, що вам доведеться його оновити. Якщо так, відкрийте Інструменти-> Диспетчер розширень, щоб встановити останню версію NuGet. Зверніть увагу, що перед встановленням NuGet вам потрібно буде запустити Dev Studio від імені адміністратора.

Встановлення 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>

1
Бадабінг !!!! витратив години на це ... досить просто встановити версію в Nuget pm .... спасибі купу !!!
Squ1rr3lz

Так, Nuget працює з Visual Studio 2010. Вам просто потрібно встановити його через диспетчер розширень. У меню Інструменти.
3спот

2
Install-Package Microsoft.AspNet.Mvc вирішить проблему. Нам насправді не потрібно згадувати номер версії
sujay kodamala

2
@sujaykodamala Установка номера версії має значення, якщо ви хочете встановити останню версію MVC3, а не MVC5 (останню версію пакету).
3спот

Install-Package Microsoft.AspNet.Mvc -Project ProjectName -Reinstallє більш явним, встановлює версію, яку ви маєте для цього проекту, і заважає їй торкатися інших проектів (за бажанням).
Mike E

30

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

Де я можу знайти dll System.Web.MVC в системі, де встановлено MVC 3?


Дякую, це допомогло мені відкрити проект, націлений на VS2010 у 2018 році :)
Аамол,

23

Найпростіший спосіб вирішити цю проблему - встановити ASP.NET MVC 3 із програми встановлення веб-платформ.

введіть тут опис зображення

http://www.microsoft.com/web/downloads/

Або за допомогою команди Nuget

Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1

1
Це вирішило мою проблему, яка виникла після того, як я перейшов на новий ПК і мав проект із посиланнями на dll-файли ASP.NET MVC 4, який я ще не встановив на новій машині.
clovola

3

у VS 2017 я очистив рішення та відновив його, і це виправило


2

У мене така сама ситуація: Visual Studio 2010, жоден NuGet не встановлений, і програма ASP.NET із використанням System.Web.Mvc версії 3.

Що працювало для мене, це встановити для кожного проекту C #, який використовує System.Web.Mvc, перейти до посилань у Провіднику рішень та встановити властивості на System.Web.Mvc, скопіювавши Local на true, а конкретну версію на false - останній змусив поле Версія відображати поточну версію на цій машині.


1

У мене була проблема в vs2017, я вже отримав MVC через nuget, але System.Web.Mvc не з’явився в списку "Асамблеї" під "Додати посилання".

Рішенням було вибрати "Розширення" в розділі "Збірки" у діалоговому вікні "Додати посилання".


0

У моєму випадку в моєму проекті були всі належні посилання. Я виявив, що шляхом побудови рішення nuget-пакети були автоматично відновлені.


0

Зразок mvcmusicstore.codeplex.com, відкритий у vs2015, пропустив деякі посилання, одне з них System.web.mvc.

Виправлення цього полягало в тому, щоб видалити його зі посилань та додати посилання: виберіть Розширення розділі Асамблеї, там ви можете знайти та додати System.Web.Mvc.

(Інші збірки, які я додав із пакетами nuget.)


0

Про всяк випадок, якщо хтось має позицію, коли він отримує таку ж помилку. У моєму випадку допоміг зниження Microsoft.AspNet.Mvc, а потім оновлення знову. У мене виникла ця проблема після встановлення та видалення Glimpse. System.Web.Mvc якось неправильно використовував посилання, чистка рішення чи його відновлення в моєму випадку не спрацювали. Просто спробуйте, якщо жодна з наведених відповідей не підходить вам.


0

Додайте посилання ще раз із ./packages/Microsoft.AspNet.Mvc.[version]/lib/net45/System.Web.Mvc.dll

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.