Pertanyaan Nonaktifkan warisan web.config?


Saya memiliki aplikasi manajemen konten di root situs web saya, dan saya mencoba menggunakan aplikasi lain (aplikasi penagihan) di bawah sub-folder. Sayangnya, web.config dari situs root mengganggu sub-aplikasi.

Apakah ada cara untuk hanya menonaktifkan warisan web.config untuk sub-folder?

Memperbarui: Seperti yang ditautkan oleh Stephen Burris, menggunakan <location> tag dapat mencegah warisan untuk bagian dari konfigurasi web, sebagai berikut:

<?xml version="1.0"?>
<configuration>
<configSections>
    ....
</configSections>
<location path="." inheritInChildApplications="false">
    <appSettings>
        ....
    </appSettings>
    <connectionStrings/>
    <system.web>
        ....
    </system.web>
    <system.codedom>
        ....
    </system.codedom>
    <system.webServer>
        ....
    </system.webServer>
</location>
<runtime>
    ....
</runtime>
</configuration>

Itu <configSections> dan <runtime> bagian tidak akan menerima tertutup dalam tag ... jadi saya kira ini hanya melakukan sebagian besar pekerjaan. Ada yang tahu bagaimana melakukannya dengan lebih baik?


32
2017-12-15 01:46


asal


Jawaban:


Ada atribut yang dapat Anda gunakan dalam file root web.config untuk menyebabkannya tidak memiliki isinya yang diwarisi oleh aplikasi anak.

inheritInChildApplications

Blog tentang inheritInChildApplications

Artikel MSDN di File Konfigurasi ASP.NET Hierarcy dan Warisan

Masukkan bagian dari konfigurasi yang bukan untuk warisan di dalamnya

<location inheritInChildApplications="false">
     <NotInheritedConfigPart/>
</location>

Bagian konfigurasi tampaknya tidak mungkin untuk tidak mewarisi, tetapi bagian lain dari konfigurasi dapat "dikomentari" seperti ini dan tidak diwariskan.


18
2017-12-15 03:25



Jika Anda dapat menggunakan 2 pool aplikasi terpisah, Anda dapat sepenuhnya menghentikan warisan dengan menggunakan attibute enableConfigurationOverride="false" dalam file applicationHost.config seperti yang saya jelaskan dalam pertanyaan ini: "Entri telah ditambahkan" - Dua App Pools terpisah

<add name="MyAppPool" enableConfigurationOverride="false" autoStart="true" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" >
    <processModel identityType="NetworkService" />
</add>

11
2017-10-15 11:16



Menurut pendapat saya setiap kali saya bergumul dengan jawaban ini berakhir dengan efektif TIDAK - dan saya meninggalkan ini di sini untuk diri masa depan saya untuk menemukan sehingga dia tidak membuang waktu lagi di atasnya.

Saya telah menemukan ini menjadi masalah besar ketika Anda hanya ingin menambahkan sesuatu sebagai direktori virtual di dalam situs yang ada. Dengan file web.config yang kompleks, saya selalu menyerah dan memindahkannya ke aplikasi yang berbeda sama sekali.


7
2018-02-24 08:45



Saya akan secara eksplisit mendefinisikan semua pengaturan yang diperlukan - jangan pernah berasumsi bahwa pengaturan apa pun masih diatur ke nilai default.

Sebagai contoh, jika Anda mendefinisikan connectionString termasuk a <clear /> tag sebelum <add name=... />, dll. Untuk Keanggotaan menentukan semua atribut, termasuk nama cookie. Dan seterusnya.

Ini mungkin membuat file sedikit lebih besar tetapi itu pasti akan membantu Anda menghindari skenario "tetapi bekerja pada kotak saya" juga :-)


4
2017-12-15 02:58