AllowDefinition = 'MachineToApplication' olarak kaydedilmiş bir bölümü uygulama seviyesinin ötesinde kullanma hatası


193

Uygulama seviyesinin ötesinde allowDefinition = 'MachineToApplication' olarak kaydedilmiş bir bölümün kullanılması bir hatadır.

/ Portal / dizinimdeki tüm aspx sayfalarımın en üst satırında bu hata mesajı var ve bunun yaygın olduğunu biliyorum. Bu hata iletisini sona erdirdim ve / portal / klasörünü IIS'de (sahip olduğum) bir uygulama olarak yapılandırmamı söyleyen çok sayıda gönderi ve web.configs ( kayıtların hiçbiri bir çözüme yönelik rehberlik sunmaz).

Benim kurulum kök dizininde bir web.config var ve sonra / portal / dizininde bir şirket portalı yapmaya çalışıyorum. / Portal / dizininin kendi (gerekli) web.config dosyası vardır.

Web.config satırım 50 şöyle:

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

Etki alanı.com/web.config AND domain.com/portal/web.config ... var, bu yüzden domain.com/portal/default.aspx sayfam yüklenmeyecek.

Bunun gerçek çözümü nedir? Bir şekilde kök web.config'mi / portal / dizin web.config ile birleştirmenin bir yolunu bulabilir miyim, yoksa burada temelden uzak mıyım?

Herhangi bir rehberlik büyük mutluluk duyacağız!


1
/ Portal / sitesinin ana web siteniz altında ayrı bir uygulama olmasını bekliyorsanız (oraya bir web.config dosyası bırakıyorsanız, o zaman onu sanal bir dizin olarak ayarlamanız gerekir. Hangi IIS sürümünü kullanıyorsunuz? Genellikle dizini sağ tıklayabilir ve Özellikler altında, "Dizin" sekmesini arayabilir ve muhtemelen gri renkte olan uygulama adının yanındaki "Oluştur" düğmesine basabilirsiniz. Üst web.config dosyasının kapsamını sınırlamak için inheritInChildApplications = "false" özniteliğine bakın. IIS sürümünüzü bildirin.
tire

Merhaba Dash. IIS7 kullanıyorum ve / portal / firmamızın insanlar için belgeleri saklayabileceği, bir takvimi koruyabileceği ve bunun gibi şeyler yapabileceği bir çalışan dizini olması gerekiyordu. Benni, söylediklerini biraz özetledi - ikinci seçeneğinde IIS çözümünü özetledi. Bu iki çözümden biri arasında eminim, bunu anlayabilirim. Bu Dash'i okuduğunuz ve bana yardımcı olduğunuz için teşekkür ederiz. Bu "oluştur" seçeneğini gördüğümde, yola çıkacağımı bileceğim! Tekrar teşekkürler!
Jason Weber

1
Bu sorunu yaşadım, yayımlamadan önce yayımlama profilini önceden derlemek için tanımladıktan sonra. obj klasörü, projeyi bozan bir web.config dosyasına sahip, obj klasöründeki her şeyi sildikten sonra tekrar çalıştı.
Rumplin

Yanıtlar:


219

Sadece arka plan bilgisi için; Bir ASP.NET web sitesinin yapılandırma bilgileri bir veya daha fazla Web.config dosyasında tanımlanır. Yapılandırma ayarları hiyerarşik bir şekilde uygulanır. Web sunucusundaki tüm web siteleri için temel yapılandırma bilgilerini açıklayan bir "genel" Web.config dosyası vardır; bu dosya içinde yaşıyor%WINDIR%\Microsoft.Net\Framework\version\CONFIG klasörde . Web sitenizin kök klasöründe bir Web.config dosyanız da olabilir. Bu Web.config dosyası, "global" Web.config dosyasında tanımlanan ayarları geçersiz kılabilir veya yenilerini ekleyebilir. Ayrıca, web sitenizin alt klasörlerinde, yeni yapılandırma ayarlarını tanımlayan veya hiyerarşide daha yüksek Web.config dosyalarında tanımlanan yapılandırma ayarlarını geçersiz kılan Web.config dosyalarınız olabilir.

Web.config dosyasındaki belirli yapılandırma öğeleri uygulama seviyesinin ötesinde tanımlanamaz, yani “global” Web.config dosyasında veya web sitesinin kök klasöründeki Web.config dosyasında tanımlanması gerekir. <authentication>Elemanı böyle bir örnektir. Yukarıdaki hata iletisi, web sitesinin alt klasörlerinden birinde, uygulama düzeyinin ötesinde tanımlanamayan bu yapılandırma öğelerinden birine sahip bir Web.config dosyası olduğunu gösterir.

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

2 olası yaklaşımı doğru olarak belirlediniz.

1 - İkinci web.config dosyanızın içeriğine ve kurulumunuzun izin verip vermeyeceğine (yani aynı kimlik doğrulama yöntemi) bağlı olarak, <authentication>ayarları ve genel olarak tanımlanması gereken diğer öğeleri üst web.config dosyasına ekleyin.

2 - Web.config içeriğini birleştiremezseniz, aşağıdaki bu bağlantı arşivlenmiş bağlantıda bulunan adımları izleyerek alt klasörü IIS'de bir web uygulamasına dönüştürebilmeniz gerekir. Orijinal bağlantı artık çalışmıyor. (bakınız arşiv ) Umarım bu yardımcı olur.


8
Evet, Benni, kesinlikle yardımcı olan ve temizleyen şeyler - bir sürü şey. Bu soruyu cevaplamadaki zamanınızı gerçekten takdir ediyorum; Sadece cevabınızı okuyarak bir ton öğrendim ve şimdi işler biraz daha mantıklı. Sanırım iki web.config dosyasını - en azından kimlik doğrulama bölümünü - birleştirmeye çalışacağım ve eğer işe yaramazsa, çeşitli IIS7 seçeneklerine bakacağım. Zaman ayırdığınız ve bilginiz için tekrar teşekkürler, Benni!
Jason Weber

13
Bir web dağıtım paketi oluşturduğumda, bir dahaki derleme yaptığımda bu soruna neden oluyor. MyWebSiteProject / obj / Debug / ... içinde Web.config'in bir kopyası var
Curtis Yallop

4
Bunu anlamaya neredeyse bir gün geçtikten sonra, son olarak, sorunu açıklayan açıklayıcı derinlemesine bir cevap, bunun yerine ... sadece çözümünüzü temizleyin ve yeniden inşa edin. Bunun için teşekkürler!
Dr.Paul Jarvis

2
Burada en büyük sorunu bir ilk derleme çalıştı, ancak daha sonra üst düzey web.config izin verilen ayarlar obj nesnesine kopyalandı web.config yasal değildi çünkü bir sonraki yapı başarısız oldu bulundu. İşin püf noktası, üst düzeydeki rahatsız edici nitelikleri kaldırmak ve yasal bir web.config dosyasını bir alt klasöre almak için obj klasörünü kaldırmaktı. Açıkçası bu, Visual Studio'da bir hatadır, ancak üst düzey web.config dosyasında alt düzey web.config dosyasında geçersiz olan öznitelikleri kullanmanız gerekmiyorsa, çözüm basittir.
csells

2
Visual Studio 2012 ve 2013'te, yapılandırma dosyasında Çıktı Dizine Kopyala = Her Zaman Kopyala olduğunda, Yayınlama işlemi yapılandırma dosyasının kopyalarını bin ve obj klasörlerine bırakmış gibi görünür ve bu da bu özel durumu tetikler. Bu Yayınlama sorununun Tim C. tarafından tanımlanan çözümü, config dosyası özelliğini Kopyalamayın olarak ayarlamaktır.
kritik

68

Değeri ne olursa olsun, "Uygulama düzeyinin ötesinde allowDefinition = 'MachineToApplication' olarak kaydedilmiş bir bölümü kullanmak bir hatadır." ve \ myWebApp \ obj \ Debug ve \ myWebApp \ obj \ Release dizinlerini temizleyerek çözdüm. Ayrıca varsayılan bir başlangıç ​​sayfası ayarlamam gerekiyordu. Ancak, uygulama daha sonra iyi başladı. HTH.


24
+1 OBJ klasörünü silmek yaygın bir düzeltme gibi görünüyor ... stackoverflow.com/a/5175074/188926
Dunc

1
OBJ klasörünün içeriğinin silinmesi bunu benim için de düzeltti. Bu hatanın birçok olası nedeni var gibi görünüyor. Doğru cevabı bulmama yardım eden ifade "yayınlanırken" idi.
Jim Neff

1
OBJ klasöründe olsaydım, bunu denerdim.
B. Clay Shannon

Varsayılan başlangıç ​​sayfasını ayarlamak, Hata Ayıklama klasörünü sildikten sonra benim için yeterli oldu (bu nedenle her ikisini de yaptığınızdan emin olun).
LoJo

Bunu denedim ve işe yaramadı. Sonra yayınladığım dosyaları IIS içindeki bir uygulamaya dönüştürmeyi unuttuğumu fark ettim.
eaglei22

60

RY4N'nin yukarıda söylediği gibi, Project klasörünüzde soruna neden olan web.config dosyası olması gerekmez. Bazı durumlarda, Debug profili altında bir yapı çalıştırmanın söz konusu projenin altındaki Debug klasöründe detritus geride bırakacağını buldum. Yayınlama profili altında daha sonra bir derleme çalıştırdığınızda yukarıdaki hataya yol açan genellikle bir web.config dosyası vardır.

Burada benim için çalışan çözüm, proje dizini altında önceki yapıların oluşturduğu tüm Debug klasörünü silmektir.


1
Teşekkürler Matthew; Sonunda bir süre önce anladım, ama evet, hata ayıklama değil, serbest bırakmak zorunda kaldım. Yanıt vermek için zaman ayırdığınız için teşekkür ederiz!
Jason Weber

3
Bahşiş için teşekkürler! Sadece web sitemdeki bin ve obj klasörlerini sildim ve yeniden oluşturduğumda sorunu çözdüm.
Paul Stegler

22

Ev bilgisayarımda da oluyordu ama SADECE sürüm yapılandırmasında Derleme Görünümlerini etkinleştirdiğimde ve bir Sürüm yapılandırması oluşturduğumda. Aksi halde olmadı.

Build Views seçeneği çok güzel olsa da, bu "hata" her zaman açılır ve uygulamayı çalıştıramama izin verdi çünkü devre dışı bıraktı.


2
Teşekkürler Tanrım ... bu başka birkaç öneri ile birlikte hile gibi görünüyordu. Cevap vermek için zaman ayırdığınız için teşekkür ederiz!
Jason Weber

1
Bu da benim başıma geliyordu. Emin değilim neden. Heck olarak "MvcBuildViews" ayarını çok daha az kullanışlı hale getirir.
Ken Smith

MvcBuildViews yalnızca kullanıcı ayarları için ayarlamanın bir yolu var mı? Lwebproject.csproj.user dosyasında mı?
C. Tewalt

VS 2013 için Güncelleştirme 2'yi yükledikten sonra bu hatayı almaya başladım. Üst düzey ve iç içe alt web sitesine sahip bir projem var, her ikisi de IIS uygulamaları olarak yapılandırılmış. MvcBuildViews kapatılması da benim için sorunu çözdü.
Greg Enslow

13

Sadece söylemek için

Eğer Yükseltirseniz (örn. 2008 -> 2010) Bir proje Visual stüdyosu, yeni çözüme eklenen proje çözümünde bir yedek oluşturur (izin verirseniz), eski Webconfig yukarıda belirtilen hatanın buradan kaynaklanabileceği yerdir. .

" Web sitesinin alt klasörlerinden birinde bulunan Web.config dosyası, uygulama düzeyinin ötesinde tanımlanamayan bu yapılandırma öğelerinden birine sahip. " @Benni_mac_b

Düzeltmek için: Bu senaryoda, yedek klasörü proje ve çözümden kaldırın.


Bu bilgi için teşekkür ederim, Ryan .... Ben sadece VS 2010 var. Yedekleme proje ve çözüm kaldırmak istediğinizde ne demek emin değilim. Ama cevabını daha yakından inceleyeceğim. Bana yardım etmeye çalışmak için zaman ayırdığınız için tekrar teşekkür ederiz! Buraya bir takip sorusu gönderdim: stackoverflow.com/questions/10414751/…
Jason Weber

12

Bunun gerçekleşmesi için başka bir sebep daha ortaya koydum.

2.0'da daha eski bir web uygulamam vardı. 4.5 çözüme geçtim.

Uygulama, Visual Studio'nun içindeyken iyi bir şekilde oluşturuldu ve hata ayıklandı, ancak daha sonra web uygulamasını yayınlamaya çalıştığımda, bu hata tekrar tekrar oluştu.

Sonunda sorun web.config dosyası için "Eylem" yerine "Gömülü Kaynak" olduğunu keşfetti. Ayrıca, Çıktı Dizine Kopyala "Kopyalama" yerine "Her Zaman Kopyala" olarak ayarlanmıştır. Bu ayarların ne zaman yapıldığını bilmiyorum, ancak uygulamanın 2.0 sürümünde olduğuna inanıyorum.

Web.config dosyasının ayarlarını değiştirmek, Visual Studio 2012 yayınındaki Yayınla eyleminin kusursuz çalışmasına izin verdi.


her çözümü denemişti. bu yardımcı oldu.
Projem

Web.config dosyamın özellikleri iki ile sınırlıdır: FileName ve FullPath; aksi halde, bunun için Yapı Eyleminin ne olduğunu kontrol ederdim.
B. Clay Shannon

11

Bir MVC projesinde de aynı sorunu yaşadım. Hata, yayınlamayı denediğimde oluştu. Obj klasörü boş çıktı (ya da en azındanweb.config ).

Koşu Clean benim için hile yapmadı.

Sorunu temizleyerek çözdüm objHerhangi bir derlemeden önce klasörü çözdüm (projenin inşası benim durumumda bu kadar uzun sürmeyecek).

Projeyi kaldırdım ve BeforeBuild Hedefine aşağıdakileri ekledim

<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>

Bu yardımcı olur umarım


7

"AllowDefinition = 'MachineToApplication' olarak kaydedilen bir bölümün uygulama düzeyinin ötesinde kullanılması bir hatadır. Bu hata, IIS'de bir uygulama olarak yapılandırılmamış bir sanal dizinden kaynaklanabilir."

VS.NET'te bu sorunu yaşadım. Bazı yapılandırma dönüşümlerini yapılandırırken yanlışlıkla Web.config dosyasının "Her zaman kopyala" özelliğini ayarladığımı öğrendim. Genellikle dönüşüm dosyalarımı "Her zaman kopyala" olarak ayarladım ancak web.config kök dosyasını "Kopyalamayın" olarak bıraktım.

Dikkat edin, çünkü web.config öğesinin özelliklerini değiştirmek tüm iç içe geçmiş dönüşümleri de değiştirir.

Yani, düzeltmek için:

1) web.config dosyasını "Kopyalamayın" olarak değiştirin

2) İsteğe bağlı olarak, yapılandırma dönüşümleri kullanıyorsanız, bunları "Her zaman kopyala" olarak ayarlayın

3) obj ve bin klasörlerini çözümden silin (bunlar görünmeyebilir, bu nedenle Solution Explorer'da proje düğümünü seçin ve "Tüm dosyaları göster" araç çubuğu düğmesine tıklayın.

4) Yayınla

Benim için çalıştı.


5

Bu hatayı yalnızca uygulamanın yayınlanması sırasında yaşadım.

Web.config (ve dönüşümler) dosyalarının özellikleri şu şekilde ayarlandı:

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

Çözüm, ayarları şu şekilde değiştirmekti:

  • Build Action - Content
  • Copy to Output - Do not Copy

4

Bu sorunu da yaşadım ve sitemi web'de yayınlamak için Yayınlama Sihirbazı'nı kullandıktan sonra ortaya çıktı.

Çok fazla araştırma yaptıktan sonra Connect web sitesinde bu Hata raporuyla karşılaştım, https://connect.microsoft.com/VisualStudio/feedback/details/779737/error-allowdefinition-machinetoapplication-beyond-application-level

Bir MS yanıt verdi ve bunun neden yayınlanırken ortaya çıkan bir sorun olduğunu açıklamanın yanı sıra, sorunu benim için düzelten geçici bir geçici çözüm de içeriyordu.


4

Sil ve oluşturmak tekrar sanal Directory. Sağ Tıkla ve Sanal Dizini " Uygulama " ya Dönüştür


3

Tıklayın Web.configÇözüm kaşif ve sağ tıklama "Özellikler" ve değişimden dosya "Output Directory kopyala: Do not copy".

resim açıklamasını buraya girin


1

Benim için nedeni, obj klasörünün web sitesi klasörü altında olması ve farklı yapılandırmalar oluşturduktan sonra birden fazla web.config dosyasının görünmesiydi. Vs2012 altında obj klasörün web sitesinden movong ile sorunu çözdüm. Bunu yapmak için web sitesi proje dosyasındaki her yapılandırmaya manuel olarak (not defterinde) $ (SolutionDir) \ Obj \ $ (Yapılandırma) ekledim.


1

Siteyi yayınladığımda aynı sorunu yaşıyordum, siteyi inşa edersem sorunum yok ama yayınlarken bu korkunç hatayı alırdım:

"AllowDefinition = 'MachineToApplication' olarak kaydedilmiş bir bölümün uygulama düzeyinin ötesinde kullanılması bir hatadır. Bu hata, IIS'de bir uygulama olarak yapılandırılmamış bir sanal dizinden kaynaklanabilir"

Burada bu yazıda belirtilen her şeyi denemedim, benim için işe yarayan sadece kullandığımla tamamen aynı olan ve iyi çalışan yeni bir yayınlama profili oluşturmaktı, hatayı alma yeni profil ile ama eski ile yapmak. Farkın ne olduğundan emin değilim ama en azından MVC projemi yayınlayabilirim.

Umarım bu birine yardımcı olur !!


1

İşte başka bir neden - Tüm web uygulamanızı kendi alt klasörlerinden birine kopyalarsanız, bu hatayı alırsınız. Bir makineden diğerine kopyalarken bunu eski bir siteye yapmayı başardım - sadece yaklaşık 2 yıllık bir boşluktan sonra siteye bakmam istendi ve hata oluştu. Birden fazla yapılandırma dosyasına sahip olmadığım için çok az şey öğrendim.


1

Bu sorunu yaşadım ve eski montajlar vb. Çözümümü temizleyerek çözdüm.

from: Build> Temiz Çözüm

sonra yeniden oluşturun.


1

Windows başlat -> Siteleri aç -> IIS -> sitenizi sağ tıklayın -> Web Sitesini Yönet -> Gelişmiş Ayarlar -> Fiziksel Yol'a gözat -> seçili olduğunuz anda alt klasörünü seçmeyi deneyin.

mantık, alt klasörün içindeki web yapılandırma dosyasının değişiklik yapmaya çalıştığı ve buna izin verilmemesi, seçilen klasör olması gerektiğidir: http://scottonwriting.net/sowblog/archive/2010/02/17/163375.aspx


1

Web sitesinde bir alt web sitesi dağıtmaya çalıştığınızda da bu hatayı alıyorum.

Çözüm şudur:

  1. Alt web.config dosyasında profil , üyelik , roleManager , sessionState gibi bazı yapılandırma sekmelerini kaldırmalısınız.
  2. Kimlik Doğrulamasını Yok olarak değiştirin: <authentication mode="None" />
  3. IIS'ye gidin ve alt klasöre sağ tıklayın - > Uygulama Ekle.
  4. Bu sorunu çözmek için IIS'yi sıfırlayın.

Başka bir sorun olsun bana ping tereddüt etmeyin, belki yardım bulabilirsiniz.


1

Bu hatayı Visual Studio 2017'de localhost'ta aldım ve Visual Studio'nun basit bir şekilde yeniden başlatılması sorunu temizledi.

Bu sorunun birden fazla web.config'ye sahip olabileceğinin farkındayım; biri alt klasör içinde. başka bir uygulama için özel olarak birden fazla web.config dosyanız varsa: dizinin sanal dizin olarak görülmediğinden emin olun.


0

Mysite.test olması gereken localchost / mysite.test aracılığıyla yerel sitenize yanlış erişim tuzağına düşmediğinizden emin olun.Bu hatayı verecek .

Sitenize localhost / dir_name gibi eriştiğinizde, bu durumda web.conf'unuz kök düzeyinin altına düşer ve bu nedenle bu hata oluşur.


0

Uygulamaları taşıyordum ve uygulama içinde birden fazla uygulama (çoklu web.configs) vardı .. Yaptığım şey IIS'ye gittikten sonra alt klasörlere sağ tıkladıktan sonra "Uygulamaya Dönüştür" ve işe yaradı.


0

Bu hatayı herkesten farklı olarak aldım:

Web dağıtım projesiyle vs2010'dan vs2012'ye ve yeni bir web yayınlama profiline geçiyordum.

Dosya sistemine yayınlamak için vs2012'de yeni bir web yayınlama projesi oluşturdum (bu ticari bir uygulama olan ayrı bir yükleyici oluşturucumuz var) ve IIS'ye bağlı mevcut web projesinin içindeki bir klasöre yayınlıyordum.

Bu, IIS sırasında dosya sistemine yayımladığım için ilk başta beni gizleyen hata sırasında hataya neden oldu (düşündüm).

Çözüm, yayınlama klasörünü web projesinin dışında değiştirmekti.


0

İyi oldu localhostama sunucuda bir sürüm yayınladığımda, aynı hatayı birkaç sayfa için başlattım. Sonra çözümü temizledim ve yeniden inşa ettim ve yayınladım, işler düzeltildi.


0

Bazen basit cevap en iyisidir. Projemde iki web.config dosyası vardı. Ana düzeyde olan benim oturum zaman aşımı (bu sorunu tetikleyen) ile başa çıkmak için değişiklik yapmak için gereken yerdir. Razor Views dizininde Razor ve görünümleri için ayarları olan ayrı bir yapılandırma dosyası vardı. Orada bir bölüm ekliyordum (uygulama düzeyinde değil!). İki ayrı web.config dosyam olduğunu fark etmeden, bariz olanı aramak dışında her şeyi denedim.


0

benim hatam yanlışlıkla bir web.config web sunucusundaki başka bir klasörün içine yapıştırarak kopyalandı


0

Yayımlanan projeyi IIS içindeki bir uygulamaya dönüştürmeyi unuttuğumda bu hatayı aldım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.