Kesalahan untuk menggunakan bagian yang terdaftar sebagai allowDefinition = 'MachineToApplication' di luar level aplikasi

193

Adalah kesalahan untuk menggunakan bagian yang terdaftar sebagai allowDefinition = 'MachineToApplication' di luar level aplikasi.

Baris teratas di semua halaman aspx saya di direktori / portal / saya memiliki pesan kesalahan ini, dan saya tahu itu adalah yang umum. Saya telah googled pesan kesalahan ini tanpa akhir, dan saya melihat banyak posting memberitahu saya untuk mengkonfigurasi / portal / folder sebagai aplikasi di IIS (yang saya miliki), dan lebih banyak posting mengatakan saya telah membuat web.configs (tetapi tidak ada posting yang menawarkan panduan menuju solusi).

Setup saya adalah saya memiliki web.config di direktori root saya, dan kemudian saya mencoba membuat portal perusahaan, di direktori / portal /. Direktori / portal / memiliki web.config sendiri (perlu).

Baris web.config saya 50 seperti ini:

    <customErrors mode="Off" defaultRedirect="customerrorpage.aspx"/>
    <anonymousIdentification enabled="true"/>
    <authentication mode="Forms"/>
    <membership defaultProvider="MyProvider">

Jadi saya punya domain.com/web.config DAN domain.com/portal/web.config ... jadi halaman domain.com/portal/default.aspx saya tidak akan dimuat.

Apa solusi nyata untuk ini? Apakah saya entah bagaimana menemukan cara untuk menggabungkan root web.config dengan web.config / portal / direktori saya, atau apakah saya jauh dari basis di sini?

Bimbingan apa pun akan sangat dihargai!

Jason Weber
sumber
1
Jika Anda mengharapkan / portal / menjadi aplikasi terpisah di bawah situs web utama Anda (jika Anda menjatuhkan web.config di sana) maka Anda perlu mengaturnya sebagai direktori virtual. Versi IIS apa yang Anda gunakan? Anda biasanya dapat mengklik kanan direktori dan, di bawah Properties, cari tab "Direktori" dan tekan tombol "Buat" di sebelah nama aplikasi, yang mungkin saat ini diklik. Untuk membatasi ruang lingkup file induk web.config, lihat atribut inheritInChildApplications = "false". Beri tahu saya versi IIS Anda.
lari
Hai Dash. Saya menggunakan IIS7, dan / portal / seharusnya menjadi direktori karyawan untuk perusahaan kami tempat orang dapat menyimpan dokumen, menyimpan kalender, dan hal-hal seperti itu. Saya pikir Benni meringkas apa yang Anda katakan - dalam pilihan keduanya, ia menguraikan solusi IIS. Saya yakin di antara salah satu dari dua solusi itu, saya dapat mengetahuinya. Terima kasih atas waktu Anda membaca Dasbor ini, dan membantu saya. Setelah saya melihat opsi "buat" itu, saya akan tahu bahwa saya sedang dalam perjalanan! Terima kasih lagi!
Jason Weber
1
Saya memiliki masalah ini, setelah saya menentukan profil publikasikan untuk dikompilasi sebelum diterbitkan. jadi folder obj topi web.config yang melanggar proyek, setelah menghapus semua yang ada di folder obj, itu berhasil lagi.
Rumplin

Jawaban:

219

Hanya untuk informasi latar belakang; Informasi konfigurasi untuk situs web ASP.NET didefinisikan dalam satu atau lebih file Web.config. Pengaturan konfigurasi diterapkan secara hierarkis. Ada file Web.config "global" yang merinci informasi konfigurasi dasar untuk semua situs web di server web; file ini tinggal di %WINDIR%\Microsoft.Net\Framework\version\CONFIGfolder. Anda juga dapat memiliki file Web.config di folder root situs web Anda. File Web.config ini dapat mengesampingkan pengaturan yang didefinisikan dalam file Web.config "global", atau menambahkan yang baru. Selain itu, Anda mungkin memiliki file Web.config di subfolder situs web Anda, yang menentukan pengaturan konfigurasi baru atau mengganti pengaturan konfigurasi yang ditentukan dalam file Web.config lebih tinggi dalam hierarki.

Elemen konfigurasi tertentu di Web.config tidak dapat didefinisikan di luar level aplikasi, yang berarti bahwa mereka harus didefinisikan dalam file Web.config "global" atau dalam file Web.config di folder root situs web. The <authentication>unsur adalah salah satu contohnya. Pesan kesalahan di atas menunjukkan bahwa ada file Web.config di salah satu subfolder situs web yang memiliki salah satu elemen konfigurasi ini yang tidak dapat ditentukan di luar level aplikasi.

Sumber: http://scottonwriting.net/sowblog/archive/2010/02/17/163375.aspx

Anda telah mengidentifikasi 2 pendekatan yang mungkin dengan benar.

1 - Bergantung pada konten web.config kedua Anda dan apakah pengaturan Anda mengizinkan (yaitu metode otentikasi yang sama) - tambahkan <authentication>pengaturan dan elemen lain yang harus didefinisikan secara global ke dalam web.config teratas

2 - Jika Anda tidak dapat menggabungkan konten web.config maka Anda harus dapat mengubah sub-folder menjadi aplikasi web di IIS dengan mengikuti langkah-langkah yang terdapat dalam tautan ini diarsipkan di bawah ini. Tautan asli tidak lagi berfungsi. (lihat diarsipkan ) Semoga ini bisa membantu.

benni_mac_b
sumber
8
Ya, Benni, benar-benar membantu dan membereskan - banyak hal. Saya sangat menghargai waktu Anda dalam menjawab pertanyaan ini; Saya belajar banyak hanya dengan membaca jawaban Anda, dan segala sesuatunya menjadi lebih masuk akal sekarang. Saya pikir saya akan mencoba untuk menggabungkan dua file web.config - setidaknya bagian otentikasi - dan jika itu tidak berhasil, saya akan melihat ke berbagai opsi IIS7. Sekali lagi terima kasih atas waktu dan informasinya, Benni!
Jason Weber
13
Ketika saya membangun paket penerapan web, itu menyebabkan masalah ini saat berikutnya saya membangun. Ini memiliki salinan Web.config di MyWebSiteProject / obj / Debug / ...
Curtis Yallop
4
Setelah hampir satu hari mencoba mencari yang satu ini, akhirnya jawaban yang mendalam deskriptif yang benar-benar menjelaskan masalah ini, yang bertentangan dengan mengatakan ... hanya membersihkan solusi Anda dan membangun kembali. Terima kasih untuk ini!
Dr. Paul Jarvis
2
Saya menemukan masalah terbesar di sini adalah bahwa build awal berfungsi, tetapi kemudian build berikutnya gagal karena pengaturan yang diizinkan di web.config tingkat atas tidak sah di web.config yang sekarang disalin ke folder obj. Caranya adalah dengan menghapus atribut yang menyinggung di tingkat atas dan menghapus folder obj untuk mendapatkan web.config yang sah ke dalam sub-folder. Jelas ini adalah bug di Visual Studio, tetapi penyelesaiannya langsung jika Anda tidak perlu menggunakan atribut di web.config tingkat atas yang ilegal di web.config sub-level.
csells
2
Dalam Visual Studio 2012 dan 2013, ketika file config memiliki Salin ke Direktori Output = Selalu Salin, proses Publikasikan sepertinya menjatuhkan salinan file config ke folder bin dan obj, yang kemudian memicu pengecualian ini. Solusi untuk masalah Publikasikan ini, yang diidentifikasi oleh Tim C., adalah dengan menyetel properti file config ke Do Not Copy.
criticalfix
68

Untuk apa nilainya, saya telah menerima kesalahan, "Ini adalah kesalahan untuk menggunakan bagian yang terdaftar sebagai allowDefinition = 'MachineToApplication' di luar level aplikasi." dan akhirnya menyelesaikannya dengan membersihkan direktori \ myWebApp \ obj \ Debug dan \ myWebApp \ obj \ Release. Saya juga perlu mengatur halaman startup default. Tapi, kemudian aplikasi mulai berjalan dengan baik. HTH.

Aaronius
sumber
24
+1 Menghapus folder OBJ tampaknya merupakan perbaikan umum ... stackoverflow.com/a/5175074/188926
Dunc
1
Menghapus isi folder OBJ juga memperbaiki ini untuk saya. Tampaknya ada banyak penyebab potensial lainnya untuk kesalahan ini. Ungkapan yang membantu saya menemukan jawaban yang tepat adalah "saat menerbitkan".
Jim Neff
1
Jika saya punya di folder OBJ, saya akan mencobanya.
B. Clay Shannon
Mengatur halaman startup default melakukan trik untuk saya setelah menghapus folder Debug tidak cukup (jadi pastikan untuk melakukan keduanya).
LoJo
Mencoba ini dan tidak berhasil. Kemudian saya menyadari bahwa saya lupa untuk mengkonversi file yang saya terbitkan ke aplikasi dalam IIS.
eaglei22
60

Seperti RY4N katakan di atas, itu belum tentu web.config di folder Project Anda yang menyebabkan masalah. Dalam beberapa kasus saya telah menemukan bahwa menjalankan build di bawah profil Debug akan meninggalkan detritus di folder Debug di bawah proyek yang dimaksud. Sering ada file web.config di sini yang mengarah ke kesalahan di atas ketika Anda kemudian menjalankan build di bawah profil Release.

Solusi yang bekerja untuk saya di sini adalah menghapus seluruh folder Debug yang dibuat oleh build sebelumnya di bawah direktori proyek.

Matthew Brown
sumber
1
Matius terima kasih; Saya akhirnya menemukan jawabannya beberapa saat yang lalu, tapi ya, saya harus mengkompilasi dalam rilis, bukan debug. Menghargai Anda meluangkan waktu untuk merespons!
Jason Weber
3
Terima kasih atas tipnya! Saya baru saja menghapus folder bin dan obj di proyek situs web saya dan itu memecahkan masalah ketika saya membangun kembali.
Paul Stegler
22

Itu juga terjadi di komputer rumah saya tetapi HANYA ketika saya mengaktifkan Build Views pada konfigurasi rilis DAN membangun konfigurasi Release. Kalau tidak, itu tidak terjadi.

Meskipun opsi Build Views sangat bagus, saya akhirnya menonaktifkannya karena "kesalahan" ini akan selalu muncul dan biarkan saya tidak dapat menjalankan aplikasi.

Penguasa Script
sumber
2
Terima kasih Tuhan ... yang sepertinya berhasil, bersama dengan beberapa saran lainnya. Saya menghargai Anda meluangkan waktu untuk menjawab!
Jason Weber
1
Ini juga terjadi pada saya. Tidak yakin kenapa. Tentu saja membuat pengaturan "MvcBuildViews" jauh lebih tidak berguna.
Ken Smith
Apakah ada cara untuk mengatur MvcBuildViews hanya untuk pengaturan pengguna? Suka dalam file webproject.csproj.user?
C. Tewalt
Saya mulai mendapatkan kesalahan ini setelah menginstal Pembaruan 2 untuk VS 2013. Saya punya proyek yang memiliki tingkat atas dan situs web anak bersarang, keduanya dikonfigurasi sebagai aplikasi IIS. Mematikan MvcBuildViews juga memecahkan masalah bagi saya.
Greg Enslow
13

Hanya berkata

Jika Anda memutakhirkan (mis. 2008 -> 2010) Sebuah proyek Visual studio akan membuat cadangan (jika Anda mengizinkannya) dalam solusi proyek yang ditambahkan ke solusi baru, Webconfig lama adalah tempat kesalahan yang disebutkan di atas kemudian dapat berasal dari .

" File Web.config di salah satu subfolder situs web daripada memiliki salah satu elemen konfigurasi ini yang tidak dapat didefinisikan di luar level aplikasi. " @Benni_mac_b

Untuk memperbaikinya: Cukup hapus folder cadangan dari proyek dan solusi, dalam skenario ini.

RY4N
sumber
Terima kasih atas informasi itu, Ryan .... Saya hanya punya VS 2010. Saya tidak yakin apa yang Anda maksud ketika Anda mengatakan menghapus folder cadangan dari proyek dan solusi. Tapi saya akan melihat lebih jauh ke jawaban Anda. Sekali lagi, terima kasih telah meluangkan waktu untuk mencoba membantu saya! Saya baru saja mengirim pertanyaan tindak lanjut di sini: stackoverflow.com/questions/10414751/...
Jason Weber
12

Saya telah datang dengan alasan lain yang memungkinkan bahwa ini terjadi.

Saya memiliki aplikasi web yang lebih lama dibangun pada 2.0. Saya memigrasikannya ke solusi 4.5.

Aplikasi dibangun dan didebug dengan baik ketika di dalam Visual Studio, tetapi kemudian ketika saya mencoba untuk mempublikasikan aplikasi web, kesalahan ini terjadi berulang-ulang.

Saya akhirnya menemukan masalahnya adalah bahwa Build Action untuk file web.config adalah "Sumber Daya Tertanam" daripada "Konten". Juga, Direktori Salin Ke Keluaran diatur ke "Selalu Salin" daripada "Jangan salin". Saya tidak tahu kapan pengaturan ini dibuat, tapi saya percaya itu kembali ke versi 2.0 aplikasi.

Memodifikasi pengaturan untuk file web.config memungkinkan tindakan Publikasi dalam publikasi Visual Studio 2012 bekerja dengan sempurna.

Tim C
sumber
telah mencoba setiap solusi lain di luar sana. ini membantu. Proyek saya dimigrasikan dari Visual Studio 2010 ke 2015, jadi mungkin "Always Copy" adalah nilai default pada 2010
Andreas Rathmayr
Properti untuk web.config saya terbatas pada dua: FileName, dan FullPath; jika tidak, saya akan memeriksa untuk apa Build Action itu.
B. Clay Shannon
11

Saya memiliki masalah yang sama dalam proyek MVC. Kesalahan terjadi ketika saya mencoba menerbitkan. Ternyata folder obj harus kosong (atau setidaknya tidak mengandung apapun web.config).

Berlari Cleantidak membantu saya.

Saya memecahkan masalah dengan membersihkan objfolder sebelum membangun apa pun (membangun proyek tidak akan memakan waktu lama dalam kasus saya).

Saya membongkar proyek, dan menambahkan yang berikut ke Target BeforeBuild

<Target Name="BeforeBuild">
    <Delete Files="$(SolutionDir)\$(ProjectDir)\bin\**\*.*" />
    <Delete Files="$(SolutionDir)\$(ProjectDir)\obj\**\*.*" />
    <RemoveDir Directories="$(SolutionDir)\$(ProjectDir)\bin" />
    <RemoveDir Directories="$(SolutionDir)\$(ProjectDir)\obj" />
    <Message Text="Clean obj/bin from web project" />
</Target>

Semoga ini membantu

Rik
sumber
7

"Adalah kesalahan untuk menggunakan bagian yang terdaftar sebagai allowDefinition = 'MachineToApplication' di luar level aplikasi. Kesalahan ini dapat disebabkan oleh direktori virtual yang tidak dikonfigurasi sebagai aplikasi di IIS."

Saya punya masalah ini di VS.NET. Ternyata ketika saya mengkonfigurasi beberapa transformasi konfigurasi saya keliru mengatur properti file Web.config "Salin selalu". Saya biasanya mengatur file transformasi saya ke "Salin selalu" tetapi meninggalkan file root web.config sebagai "Jangan salin".

Hati-hati, karena mengubah properti web.config juga mengubah semua transformasi bersarang.

Jadi, untuk memperbaiki:

1) Ubah web.config menjadi "Jangan salin"

2) Secara opsional, jika Anda menggunakan transformasi konfigurasi, aturlah ke "Salin selalu"

3) Hapus folder obj dan bin dari solusi (ini mungkin tidak terlihat jadi pilih simpul proyek di Solution Explorer dan klik tombol toolbar "Tampilkan semua file".

4) Publikasikan

Bekerja untukku.

ben
sumber
5

Saya mengalami kesalahan ini hanya selama penerbitan aplikasi.

Properti file web.config (dan transformasi) ditetapkan sebagai:

  • Build Action - None
  • Copy to Output - Always.

Solusinya adalah mengubah pengaturan ke:

  • Build Action - Content
  • Copy to Output - Do not Copy
Hugo
sumber
4

Saya juga memiliki masalah ini dan muncul setelah saya menggunakan Penerbit Wizard untuk mempublikasikan situs saya ke web.

Setelah banyak menggali, saya menemukan laporan Bug ini di situs web Connect, https://connect.microsoft.com/VisualStudio/feedback/details/779737/error-allowdefinition-machinetoapplication-beyond-application-level

Seorang wakil MS menjawab dan menjelaskan mengapa ini adalah masalah yang terjadi ketika menerbitkan dia juga menyertakan solusi sementara yang memperbaiki masalah ini untuk saya.

Pat Long - Munkii Yebee
sumber
4

Hapus dan buat Direktori virtual lagi. Klik Kanan dan Ubah Direktori virtual menjadi " Aplikasi "

sudhAnsu63
sumber
3

Klik pada Web.configfile dari Solution explorer dan klik kanan "Properties" dan ubah menjadi "Copy to Output Directory: Don't copy".

masukkan deskripsi gambar di sini

nPcomp
sumber
1

Bagi saya alasannya adalah bahwa folder obj berada di bawah folder situs web dan beberapa web.config muncul setelah membangun konfigurasi yang berbeda. Saya memecahkan masalah di bawah vs2012 dengan memindahkan folder obj keluar dari situs web. Untuk melakukan ini, saya telah menambahkan secara manual (di notepad) $ (SolutionDir) \ Obj \ $ (Konfigurasi) untuk setiap konfigurasi dalam file proyek situs web.

Mikhail.Gorbulsky
sumber
1

Saya mengalami masalah yang sama ketika saya akan menerbitkan situs, jika saya membangun situs saya tidak mendapatkan masalah tetapi saat menerbitkan saya akan mendapatkan kesalahan yang mengerikan ini:

"Adalah kesalahan untuk menggunakan bagian yang terdaftar sebagai allowDefinition = 'MachineToApplication' di luar level aplikasi. Kesalahan ini dapat disebabkan oleh direktori virtual yang tidak dikonfigurasi sebagai aplikasi di IIS"

Saya mencoba segala sesuatu yang telah dinyatakan di sini dalam posting ini ke no resort, apa yang berhasil bagi saya adalah hanya membuat profil publikasi baru dengan persis sama dengan yang saya gunakan dan yang berfungsi dengan baik, jangan mendapatkan kesalahan dengan profil baru tetapi lakukan dengan yang lama. Tidak yakin apa bedanya tapi setidaknya saya bisa menerbitkan proyek MVC saya.

Semoga ini bisa membantu seseorang !!

FabianVal
sumber
1

Inilah alasan lain - Jika Anda menyalin seluruh aplikasi web ke salah satu sub-foldernya sendiri, Anda akan mendapatkan kesalahan ini. Saya berhasil melakukan ini ke situs lama ketika menyalin dari satu mesin ke komputer lain - baru saja diminta untuk melihat situs tersebut setelah jeda sekitar 2 tahun dan kesalahan terjadi. Mengambil sedikit gambaran - karena saya tidak memiliki banyak file konfigurasi.

Martin Smellworse
sumber
1

Saya memiliki masalah ini, dan diselesaikan dengan membersihkan solusi saya dari majelis lama dll.

dari vs: Build> Clean Solution

lalu Bangun Kembali.

kennydust
sumber
1

Mulai Windows -> buka Situs -> IIS -> klik kanan situs Anda -> Kelola Situs Web -> Pengaturan Lanjut -> jelajahi Jalur Fisik -> cobalah untuk memilih sub-folder dari begitu Anda memilih saat ini.

logikanya adalah bahwa file konfigurasi web di dalam subfolder sedang mencoba untuk membuat perubahan dan ini tidak diizinkan, harus folder yang dipilih: http://scottonwriting.net/sowblog/archive/2010/02/17/163375.aspx

Subodh Pradhan
sumber
1

Saya juga mendapatkan kesalahan ini ketika mencoba menggunakan sub situs web di situs web.

Solusinya adalah:

  1. Anda harus menghapus beberapa tab konfigurasi seperti: profil , keanggotaan , roleManager , sessionState di sub web.config
  2. Ubah Otentikasi menjadi Tidak Ada sebagai: <authentication mode="None" />
  3. Dan pergi ke IIS klik kanan pada sub folder - > Tambah Aplikasi.
  4. Setel ulang IIS untuk menyelesaikan masalah ini.

JIKA mendapatkan masalah lain jangan ragu ping saya, mungkin saya akan menemukan bantuan.

Trung
sumber
1

Saya menerima kesalahan ini di localhost di Visual Studio 2017, dan restart sederhana Visual Studio menyelesaikan masalah ini.

Saya menyadari masalah ini juga dapat disebabkan oleh memiliki lebih dari satu web.config; satu dalam sub-folder misalnya. jika Anda memiliki banyak file web.config dengan sengaja untuk aplikasi lain: pastikan direktori tersebut tidak dilihat sebagai direktori virtual.

Josh Harris
sumber
0

Pastikan Anda tidak terjebak dalam mengakses situs lokal Anda yang salah melalui localchost / mysite.test yang seharusnya menjadi mysite.test yang akan memberi Anda kesalahan ini.

Ketika Anda mengakses situs Anda seperti localhost / dir_name, dalam hal ini, web.conf Anda berada di bawah level root dan karenanya kesalahan ini.

Hammad Khan
sumber
0

Saya memigrasikan aplikasi dan aplikasi memiliki beberapa aplikasi (beberapa web.configs) di dalamnya .. apa yang saya lakukan adalah masuk ke IIS kemudian klik kanan pada sub folder kemudian "Konversi ke Aplikasi" dan itu berhasil.

sojim2
sumber
0

Saya mendapat kesalahan ini secara berbeda dari orang lain:

Saya bermigrasi dari vs2010 dengan proyek penerapan web ke vs2012 dan profil publikasi web baru.

Saya membuat proyek publikasi web baru di vs2012 untuk mempublikasikan ke sistem file (kami memiliki pembuat installer terpisah ini adalah aplikasi komersial) dan saya menerbitkan ke folder yang ada di dalam proyek web yang ada yang terhubung dengan IIS.

Ini menyebabkan kesalahan pada saat penerbitan yang membingungkan saya pada awalnya karena saya menerbitkan ke sistem file, bukan IIS (saya pikir).

Solusi adalah mengubah mempublikasikan ke folder ke luar proyek web.

JohnC
sumber
0

Itu baik-baik saja, localhosttetapi ketika saya menerbitkan rilis di server, saya memulai kesalahan yang sama untuk beberapa halaman. Kemudian saya membersihkan solusinya dan membangun kembali & menerbitkan, semuanya diperbaiki.

Baqer Naqvi
sumber
0

Terkadang, jawaban sederhana adalah yang terbaik. Saya punya dua file web.config di proyek saya. Yang ada di tingkat utama adalah di mana saya perlu melakukan perubahan untuk menangani batas waktu sesi saya (yang memicu masalah ini). Saya memiliki file konfigurasi terpisah di direktori Razor Views saya, yang memiliki pengaturan untuk Razor dan pandangannya. Saya menambahkan bagian di sana (bukan di level aplikasi!). Tanpa sadar saya memiliki dua file web.config terpisah, saya mencoba segalanya kecuali mencari yang sudah jelas.

Guy Schalnat
sumber
0

kesalahan saya adalah secara tidak sengaja menyalin menempel web.config di dalam folder lain di server web

krilovich
sumber
0

Saya mendapatkan kesalahan ini ketika saya lupa untuk mengubah proyek yang diterbitkan menjadi aplikasi dalam IIS.

eaglei22
sumber