Tipe atau nama namespace tidak ada di namespace 'System.Web.Mvc'

217

Solusi Buiding MVC3 berjalan dengan baik tetapi ada kesalahan di browser:

Pesan Kesalahan Kompiler: CS0234: Tipe atau nama namespace 'Html' tidak ada di namespace 'System.Web.Mvc' (apakah Anda kehilangan referensi perakitan?)

Source Error:
Line 25:         <add namespace="System.Web.Mvc" />
Line 26:         <!--<add namespace="System.Web.Mvc.Ajax" />-->
Line 27:         <add namespace="System.Web.Mvc.Html" />
Line 28:         <add namespace="System.Web.Routing" />
Line 29:         <add namespace="System.Web.WebPages" />

Saya telah menginstal paket untuk solusi dengan NuGetdan mengatur untuk semua proyek MVC3. Apakah MVC3termasuk perpustakaan System.Web.Mvc.Ajax, System.Web.Mvc.Htmldan lainnya? Mengapa saya mendapatkan kesalahan?


Di folder Referensi, saya memiliki System.Web.Mvc

Runtime version: v4.0.30319,

Version: 3.0.0.0

Web.config

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=152368
  -->
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
    <add key="webpages:Version" value="1.0.0.0" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880" />
    </authentication>
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
    <httpRuntime targetFramework="4.5" encoderType="System.Web.Security.AntiXss.AntiXssEncoder, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    <machineKey compatibilityMode="Framework45" />
    <profile defaultProvider="DefaultProfileProvider">
      <providers>
        <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </profile>
    <membership defaultProvider="DefaultMembershipProvider">
      <providers>
        <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
      </providers>
    </membership>
    <roleManager defaultProvider="DefaultRoleProvider">
      <providers>
        <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </roleManager>
    <sessionState mode="InProc" customProvider="DefaultSessionProvider">
      <providers>
        <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
      </providers>
    </sessionState>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>
  <connectionStrings>
    <add name="EFDbContext" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=SportStore;Integrated Security=True;Pooling=False;" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

MSDN namespace System.Web.Mvc

file packages.config:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="5.0.0-rc" />
  <package id="jQuery" version="1.7.2" />
  <package id="jQuery.UI.Combined" version="1.8.11" />
  <package id="jQuery.Validation" version="1.9" />
  <package id="Microsoft.AspNet.Mvc" version="3.0.20105.1" />
  <package id="Microsoft.AspNet.Providers.Core" version="1.0" />
  <package id="Microsoft.AspNet.Providers.LocalDB" version="1.0" />
  <package id="Microsoft.AspNet.Razor" version="1.0.20105.408" />
  <package id="Microsoft.AspNet.WebPages" version="1.0.20105.408" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" />
  <package id="Modernizr" version="2.0.6" />
  <package id="Moq" version="4.0.10827" />
  <package id="Ninject" version="3.0.1.10" />
</packages>
J.Olufsen
sumber
1
apa server web anda? apakah ini di iis?
Daniel A. White
Express IIS di Visual Studio 2012
J.Olufsen
1
apa target proyek Anda ditetapkan?
Daniel A. White
2
Bergantung pada siapa yang menjawab pertanyaan ini - ini semua yang diperlukan untuk sebagian dari kita Kelola Paket Nuget untuk Solusi ... >> Pembaruan
Tom Stickel

Jawaban:

420

Bersihkan solusi Anda dan kemudian atur properti file-file tersebut Copy Local = True.

Untuk mengatur properti Salin Lokal ke Benar atau Salah

Di Solution Explorer, klik tombol Tampilkan Semua File untuk menampilkan simpul Referensi.

  • Buka simpul Referensi untuk proyek.
  • Klik kanan referensi di daftar Referensi, dan klik Properties. Properti yang terkait dengan referensi itu muncul dalam daftar di jendela Properties.
  • Di jendela Properti, ubah properti Salin Lokal ke Benar atau Salah.
Toffee
sumber
11
Luar biasa! Ini memperbaikinya bagi saya di proyek MVC4. Ini agak jelas ketika Anda memikirkannya. Saya tidak pernah melihat proyek yang dikerahkan untuk melihat apakah DLL ada di sana.
Alex Kilpatrick
1
Terima kasih! Ini membantu saya juga!
Maritim
1
Sama-sama. Terkadang masalah kompleks diselesaikan dengan solusi sederhana. :)
Toffee
5
Berhasil! Saya hanya mengubah satu referensi =>System.Web.Mvc
Jaider
5
Butuh waktu beberapa saat untuk mencari tahu apa arti "file-file itu". Pergi melalui referensi perakitan pada setiap proyek dalam solusi, apa pun dengan "Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies" atau sejenisnya di jalan adalah bagian dari masalah.
Tugas
60

Untuk alasan apa pun, DUA solusi saya memiliki proyek web yang secara spontan menghapus instalan MVC asp.net. Saya menginstalnya dari Nuget dan sekarang keduanya bekerja lagi. Ini terjadi setelah sejumlah pembaruan windows baru-baru ini yang mencakup pembaruan .net framework untuk versi yang saya gunakan (4.5.1).

Sunting: Dari Blog .Net Web Development dan Tools:

Pembaruan Keamanan Microsoft Asp.Net MVC MS14-059 mematahkan build saya!

Chris
sumber
4
Ini baru saja terjadi pada saya. Namun, saya memperbarui paket MVC saya alih-alih menginstalnya kembali (toh paket saya sudah ketinggalan jaman). Apakah ada sumber atau alasan mengapa ini terjadi?
Joshua H
5
Ini sepertinya terkait dengan KB2994379 atau KB2992080 , tergantung pada versi MVC yang Anda referensikan (masing-masing 5.1 dan 5.0). Pembaruan memberikan versi baru System.Web.Mvc yang saya anggap memperkenalkan konflik versi. Memperbarui paket MVC Anda akan memperbaiki kesalahan. Jika Anda tidak dapat memperbarui karena alasan apa pun, Anda harus mengatur System.Web.Mvc.dll untuk disalin secara lokal.
Vinney Kelly
1
Saya memiliki masalah yang sama. Perbarui paket dan setel salinan local = true. Terimakasih semuanya!!!!
Vackup
1
Salin MVC lokal = true +1.
Stanomatic
4
Hal yang sama terjadi pada saya. Harus mengatur MVC untuk menyalin lokal = SALAH, membangun kembali, menyalin lokal = BENAR, membangun kembali. Semuanya bagus.
Jeppebm
38

Yang ini biasanya menangkap saya ketika saya menjalankan dari IIS dan kumpulan aplikasi untuk situs default diatur ke .NET versi 2.0. Saat menggunakan IIS dari visual studio itu menciptakan direktori virtual tetapi masih berjalan di bawah kumpulan aplikasi situs default. Jika menggunakan server web build, klik kanan pada proyek web Anda, buka properti dan pastikan Anda menjalankannya di bawah versi .NET yang tepat. Pada IIS, periksa versi .NET di kumpulan aplikasi Anda.

Berikut dari komentar terakhir saya tentang bagaimana proyek dibuat - apakah Anda benar termasuk majelis, seperti di bawah ini (diambil dari file web.config default yang dihasilkan oleh template proyek MVC3 di VS10):

<compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      </assemblies>
</compilation>
BlackSpy
sumber
2
Semua proyek diatur untuk menggunakan .NET Framework 4.5. Apakah ini berarti bahwa .NET 4.5 tidak dapat menemukan System.Web.Mvc.Ajax dan kelas lainnya?
J.Olufsen
Biasanya itu berarti bahwa itu diatur untuk berjalan sebagai 4,5 tetapi sebenarnya berjalan sebagai sesuatu yang lain yang berarti tidak dapat menemukan System.Web.Mvc.Ajax di System.Web.Mvc.
BlackSpy
Selain itu, apa versi System.Web.dll Anda? Alasan yang saya tanyakan adalah bahwa Anda mengatakan Anda menambahkan majelis dari NuGet - apakah Anda tidak membuat proyek web MVC3?
BlackSpy
31

Anda perlu memperbarui MVC.

  1. Pergi ke Alat -> Pengelola Paket NuGet -> Kelola Paket NuGet untuk Solusi
  2. Klik pada "Pembaruan"
  3. Perbarui "Microsoft ASP.NET MVC"
  4. Membangun Kembali Solusi
Mat
sumber
1
Menggunakan Paket NuGet adalah baik, namun dapat mengunduh banyak rakitan lain yang mungkin tidak diperlukan, namun ini akan memperbaikinya.
Kanvas
1
Punya masalah yang sama, punya karunia.
Nit
28

Saya memiliki masalah yang sama - skenario saya adalah bahwa saya mereferensikan System.Web.Mvc.dll baru dari folder lib dan saya tidak memiliki "Copy Local" yang disetel ke true. Aplikasi itu kemudian kembali ke versi di GAC yang tidak memiliki ruang nama yang benar (Html, Ajax dll) di dalamnya dan memberi saya kesalahan run time.

Peter Munnings
sumber
16

Solusi saya ada di bawah Manage Nuget Packages for Solution ... - Saya punya sekian banyak pembaruan yang harus dilakukan untuk beberapa paket.

Biarkan saya mundur setengah langkah dan mengatakan bahwa saya mengacaukan diri saya sendiri karena saya memindahkan solusi dan proyek-proyek dari satu folder ke folder lain ... jadi semuanya sudah menjadi rusak dibandingkan dengan di mana proyek-proyek itu memikirkan segalanya. Semuanya bergerak dengan baik, tetapi ternyata Nuget menjadi bingung kecuali Anda menggunakan pendekatan yang berbeda dari yang saya lakukan.

Kembali ke solusi ... Saya hanya pergi ke Manage Nuget Packages for Solution ... >> Pembaruan >> Microsoft dan .NET dan tekan tombol Update All .

Semuanya kembali normal dan bahagia.

azarc3
sumber
Saya mengeposkan solusi jenis yang sama setelah secara tidak sengaja melewatkan pos Anda +1 untuk Anda
Tom Stickel
Ini adalah perbaikan untuk saya juga.
bradj
Perhatikan bahwa Anda mungkin juga perlu memperbarui JQuery dan Bootstrap setelah melakukan ini
Carl Onager
Memperbarui paket nuget mvc, silet, dan halaman web berhasil untuk saya di proyek MVC5.
voam
9

Saya mengunduh proyek mvc 5 dan masalah yang menyinggung menunjuk

<add namespace="System.Web.Mvc.Ajax" />  

Dengan pesan kesalahan ini:

CS0234: The type or namespace name 'Ajax' does not exist in the namespace 'System.Web.Mvc' (are you missing an assembly reference?)

-> di mana saya datang ke halaman web ini dan mencoba membersihkan dan beberapa hal di atas dll ...

Yang berhasil bagi saya adalah hanya untuk

Manage Nuget and Update all the packages.  Then it worked fine.
Tom Stickel
sumber
1
Oh, saya akan meninggalkan posting saya, tetapi saya melihat bahwa azarc3 mengatakan hal yang sama. membantunya.
Tom Stickel
7

Menjalankan perintah berikut di manajer paket nuget memperbaikinya untuk saya:

update-package microsoft.aspnet.mvc -reinstall
pengguna1477388
sumber
2
Ini perlu ditingkatkan sekitar seribu kali lagi.
Chazt3n
1
@ Chazt3n Tidak bekerja untuk saya, tapi saran yang bagus jadi +1
Jared Beach
Saya mencoba semua metode lain, dan secara teknis menggunakan manajer Paket, dihapus dan diinstal ulang dan diperbarui dan apa yang tidak. Jadi saya pesimis tentang jawaban ini, tetapi putus asa. Ini berhasil entah bagaimana.
Mahesh
6

Jawaban ini agak terlambat diberikan tanggal pertanyaan, tetapi seseorang mungkin merasa berguna.

Tidak ada solusi di atas yang bekerja untuk saya di Visual Studio 2012 pada proyek lokal, Net Framework 4.5 MVC 4. Untuk konteksnya, saya mengikuti tutorial tentang membuat barebones Web Api di CodeProject ( http://www.codeproject.com/ Artikel / 615805 / Membuat-Bersih-Minimal-Jejak-ASP-NET-WebAPI ) ketika saya mengalami masalah ini.

Apa yang berhasil bagi saya secara eksplisit menambahkan "System.Web.Mvc" ke referensi aplikasi saya, meskipun aplikasi sudah melakukan referensi "System.Web".

Sean
sumber
Terima kasih. Ini menyelesaikan masalah saya (walaupun itu dengan DevExpress.Web.Mvc)
dferraro
+1. Saya menggunakan MvcSiteMapProvider dan karena tidak bekerja dengan majelis terbaru MVC, saya tidak bisa melakukan "Perbarui Semua" untuk paket Microsoft ASP.Net MVC melalui nuget. Satu saran lagi adalah Anda mungkin perlu melakukan "CopyLocal = True" untuk perakitan ini.
user007
Hanya perlu mendorong aplikasi web debug ke lingkungan baru. Diperlukan untuk menambahkan "salin lokal" ke referensi.
dudeNumber4
4

Saya memiliki masalah yang sama, tetapi tidak ada yang berhasil bagi saya. Mereka menempatkan saya ke arah yang benar.

Misalnya ketika saya mengatur "Salin Lokal" ke "benar" untuk referensi System.Web.Mvc, secara otomatis mengaturnya kembali ke Salah.

Saya memiliki beberapa proyek yang bergantung pada referensi System.Web.Mvc di solusi saya, tetapi hanya satu yang menyebabkan masalah ini. Dalam VS 2012 referensi ini diberi label dengan segitiga perhatian kuning.

Temukan referensi ini => hapus itu => tambahkan kembali

Itu memperbaikinya bagi saya. Semoga ini membantu

bohem.be
sumber
3

Lihat dan periksa jalur referensi di csproj Anda.

Saya telah menghapus referensi untuk System.Web.Mvc (dan lainnya) dan membacanya ke jalur khusus. C:\Project\OurWebReferences

Namun, setelah melakukan ini, jalur referensi di masih csproj tidak berubah. DULU

<Reference Include="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\..\OurWebProject\bin\Debug\System.Web.Mvc.dll</HintPath>
</Reference>

Diubah menjadi manual

<Reference Include="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
        <HintPath>..\..\..\..\OurWebReferences\System.Web.Mvc.dll</HintPath>
</Reference>

Paths adalah contoh saja.

Valamas
sumber
3

Bagi saya, solusinya adalah untuk memastikan semua proyek membangun untuk CPU yang sama - dalam kasus saya x86

Rob Bowman
sumber
2

Salin Lokal = Benar dipecahkan untuk salah satu proyek saya. Tetapi dalam proyek lain, saya mendapatkan kesalahan yang sama, mencoba mengatur Copy Local = true, tetapi tidak menyelesaikan masalah saya. Mengubah kerangka kerja Target dari 4.5.1 ke 4.5 di Project Properties Membantu dengan ini.

Andrey
sumber
2

Saya melakukan sesuatu yang sangat bodoh (dan mungkin Anda juga melakukannya).

Saya mencoba menelepon System.Web.Mvc.Html.Partial("<Partial Page>")

System.Web.Mvc.Html adalah namespace dan bukan kelas dan saya tidak membaca pesan kesalahan saya dengan baik, jadi saya menafsirkan kesalahan saya sebagai kelas Html tidak ada di namespace System.Web.Mvc dan itulah bagaimana saya mengakhiri di sini (bodoh saya tahu).

Yang perlu saya lakukan adalah menambahkan pernyataan menggunakan @using System.Web.Mvc.Htmlke halaman saya dan kemudian @Html.Partialbekerja seperti yang diharapkan.

Pantai Jared
sumber
Visual Studio 2015 akan menandai penggunaan sebagai tidak diperlukan, tetapi jika Anda membiarkannya dihapus, maka Anda akan mendapatkan kesalahan seperti: "Tipe atau nama namespace 'Pembantu' tidak ada di namespace 'Microsoft.Web' (apakah Anda tidak ada referensi perakitan?) ".
justdan23
1

jika salah satu di atas tidak menyelesaikan masalah Anda cukup atur properti System.Web.Mvc.dll untuk menyalin mendatang.

itu akan memecahkan

Ramakrishna
sumber
1

Saya memiliki masalah yang sama, tetapi dalam kasus saya berasal dari faktor lain. Saya menulis ini untuk membantu orang lain dengan masalah yang sama. Saya punya solusi dengan banyak proyek. dua di antaranya bekerja dengan System.Web.Mvc, Biasanya referensi kami menunjuk ke paket eksternal di mana kami mengontrol versi yang digunakan. Untuk beberapa alasan salah satu referensi proyek pergi ke GAC dan arahkan ke dll GAC (versi 4.0.0.1) dan program mendapat kesalahan. Untuk memperbaikinya:

Sederhana memeriksa apakah referensi ke System.Web.Mvc menunjuk ke dll yang sama di jalur direktori yang sama.

Saya harap itu membantu.

pengembang freede
sumber
1

Saya telah menghapus System.Web.dll dari Bin frolder situs saya.

andre719mv
sumber
im kasus saya ya. Saya beralih ke cabang lama tanpa MVC. Dan System.Web.dll dalam folder Bin memecahkan bild saya.
andre719mv
1

Saya punya masalah ini, mengatur salinan lokal dan mematikan dll tidak berfungsi. Proyek ini tidak menggunakan nuget jadi perbaikan di sekitar yang keluar dari pertanyaan juga.

Perbaikan untuk saya adalah menginstal MVC 3 (yang saya lakukan melalui installer platform web).

Saya menduga ini akan menjadi lebih banyak solusi bagi orang-orang karena kerangka kerja .net terus maju dan orang-orang tidak menginstal MVC yang lebih lama.

4imble
sumber
1

Kemungkinan mengatur DLL Anda ke CopyLocal / true atau perbaikan besar lainnya untuk ini akan memperbaiki masalah Anda, tetapi di sini ada kasus tepi lain yang menangkap saya selama 20 menit waktu yang terbuang.

Saat Anda menambahkan ruang nama Anda ke Views / Web.config Anda, pastikan semuanya ditulis dengan benar:

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="THE.NameSpace" />
        <add namespace="THE.Namespace" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>
Stunt Double Moby
sumber
1

Ok jadi banyak orang tampaknya mengalami masalah ini. Masalah saya disebabkan oleh referensi yang memiliki jalur ke folder bin dari proyek lain, atau referensi dll dari folder sistem. Proyek ini berusia sekitar 6 tahun dan para pengembang sebelumnya telah memutuskan bahwa ini adalah cara mereka akan merujuk perpustakaan mereka.

Solusinya adalah melalui setiap referensi dan memeriksa jalur, kemudian menghapus referensi dan menambahkannya menggunakan NuGet. Untuk paket apa pun yang tidak ada di NuGet saya membuat folder lain di samping paket dan meletakkan dll di sana dalam tata letak yang sama seperti NuGet.

Saya juga harus membaca file-file konfigurasi dan memastikan versi paket yang benar digunakan. Proses yang panjang dan menyakitkan!

John
sumber
1

Saya memiliki proyek yang melakukan ini setiap kali saya membangun dengan tampilan terbuka. Segera setelah saya menutup tampilan, kesalahan hilang dan build berhasil. Sangat aneh.

Tandai Baik
sumber
0

Saya memiliki masalah yang sama, tidak ada solusi yang bekerja untuk saya, Akhirnya saya menghapus System.Web.MVCdan menambahkan lagi Kemudian semuanya kembali normal dan masalah saya terpecahkan.

Sirwan Afifi
sumber