2008-12-15 41 views
32

Tôi có một ứng dụng quản lý nội dung trong thư mục gốc của trang web của mình và tôi đang cố gắng sử dụng một ứng dụng khác (ứng dụng thanh toán) trong thư mục con. Thật không may, web.config của trang gốc đang can thiệp vào ứng dụng con.Tắt tính năng kế thừa web.config?

Có cách nào để tắt tính năng kế thừa web.config cho thư mục con không?

Cập nhật: Như liên kết bởi Stephen Burris, sử dụng thẻ <location> có thể ngăn ngừa thừa kế cho một phần của cấu hình web, như sau:

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

Các <configSections><runtime> phần sẽ không chấp nhận được kèm theo trong tag ... vì vậy tôi đoán điều này chỉ làm hầu hết công việc. Có ai biết cách làm tốt hơn không?

Trả lời

18

Có một thuộc tính mà bạn có thể sử dụng trong các trang web gốc. cấu hình tập tin để làm cho nó không có nội dung của nó trở thành kế thừa bởi các ứng dụng con.

inheritInChildApplications

Blog about inheritInChildApplications

MSDN article on ASP.NET Configuration File Hierarcy and Inheritance

Đặt một phần của cấu hình đó không phải là cho các thừa kế bên

phần
<location inheritInChildApplications="false"> 
    <NotInheritedConfigPart/> 
</location> 

Config dường như là không thể không kế thừa, nhưng khác các phần của cấu hình có thể được "bình luận" ra như thế này và không được thừa hưởng.

+0

Tôi không thể sử dụng "inheritInChildApplications" vì VS không thích nó. Những gì tôi đã làm thay vào đó là phủ nhận những thứ IIS đã phàn nàn về bằng cách sử dụng một thẻ . Điều đó làm việc cho tôi. – dyslexicanaboko

+3

Có vấn đề với cách tiếp cận này. Bạn có thể vô hiệu hóa kế thừa các mục trong nhưng điều này không có gì với phần . Có ai biết cách vô hiệu hóa thừa kế các mục trong không? – Ropstah

4

Tôi sẽ xác định rõ ràng tất cả các cài đặt được yêu cầu - không bao giờ giả định rằng bất kỳ cài đặt nào vẫn được đặt thành giá trị mặc định.

Ví dụ: nếu bạn định nghĩa một kết nốiString bao gồm một thẻ <clear /> trước <add name=... />, v.v ... Đối với thành viên, hãy xác định tất cả các thuộc tính, bao gồm tên cookie. Và cứ thế.

Nó có thể làm cho tập tin lớn hơn một chút nhưng nó chắc chắn sẽ giúp bạn tránh được những "nhưng nó làm việc trên hộp của tôi" kịch bản quá :-)

+0

Không chính xác những gì tôi mong đợi một câu trả lời tốt để được, nhưng có lẽ đó là lựa chọn ít nhất là xấu ... – dkretz

7

Theo ý kiến ​​của tôi mỗi khi tôi gặp khó khăn với câu trả lời này thì sẽ không có hiệu quả - và tôi để nó ở đây để tự tìm kiếm trong tương lai để anh ta không lãng phí thêm thời gian nữa.

Tôi đã nhận thấy đây là một vấn đề lớn khi bạn chỉ muốn thêm thứ gì đó làm thư mục ảo bên trong trang web hiện có. Với một tệp web.config phức tạp, tôi luôn kết thúc việc từ bỏ và chuyển nó sang một ứng dụng khác hoàn toàn.

+0

là họ sửa lỗi này trong 'asp.next' hay bất kỳ điều gì liên quan? –

+3

Tôi không thể tin rằng không có cách nào để ghi đè lên điều này! Thật là một crock của s ** t! – Gareth

11

Nếu bạn có thể sử dụng 2 hồ bơi ứng dụng riêng biệt, bạn hoàn toàn có thể ngăn chặn thừa kế bằng cách sử dụng một attibute enableConfigurationOverride="false" trong file applicationHost.config như tôi mô tả trong câu hỏi này: “Entry has already been added” - Two Separate App Pools

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

Điều này cực kỳ tốt. – AgentFire

+0

Không hoạt động với IIS 8 :( – Rodolfo

Các vấn đề liên quan