2008-12-18 28 views
29

Chúng tôi có một phần tùy chỉnh trong tệp app.config liên quan đến lớp chứa IoC của chúng tôi. Làm thế nào tôi có thể nhận được intellisense khi chỉnh sửa các tập tin cấu hình cho phần này, cũng như nhận được thoát khỏi các thông điệp trình biên dịch thông báo cho tôi về các lược đồ còn thiếu.Làm thế nào để tôi có được intellisense trong app.config cho một phần tùy chỉnh?

Tôi tìm thấy câu hỏi này ở đây: app.config configSections custom settings can not find schema information, nhưng tôi không hiểu liệu nó có áp dụng cho vấn đề của tôi hay không và cách sử dụng câu trả lời ở đó nếu có.

Tôi cũng tìm thấy trang này How to get Intellisense for Web.config and App.config in Visual Studio .NET, nhưng nó nói để loại bỏ thuộc tính xmlns trước khi chạy ứng dụng. Đó có thực sự là cách duy nhất/tốt nhất không?

Dưới đây là một ví dụ về một tập tin đơn giản:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="ServiceContainers" 
     type="LVK.IoC.RegistrationsSectionHandler, LVK"/> 
    </configSections> 
    <ServiceContainers> 
    <Registration type="DatabaseConnection" class="DatabaseConnection"> 
     <Parameter name="connectionString" type="System.String" 
      value="TYPE=MSSQL2000;SERVER=localhost;DATABASE=db"/> 
    </Registration> 
    </ServiceContainers> 
</configuration> 

Về cơ bản tôi muốn để có thể gõ <R bên trong nút <ServiceContainers>, và nhận Đăng ký doanh nghiệp đề nghị với tôi trong danh sách thả xuống IntelliSense, cũng như các thuộc tính thích hợp cho nó.

Trả lời

21

XML Intellisense sẽ không tự động hoạt động cho phần cấu hình tùy chỉnh.

Visual Studio có thể báo cáo cảnh báo về biên dịch khiếu nại rằng các thuộc tính của phần cấu hình tùy chỉnh không được xác định. Những cảnh báo này có thể bị bỏ qua.

Nếu bạn muốn hỗ trợ XML IntelliSense cho phần cấu hình tùy chỉnh (hoặc nếu bạn chỉ muốn cảnh báo 'không tìm thấy lược đồ' biến mất), hãy thêm dòng sau vào tệp DotNetConfig.xsd của bạn ngay sau < xs: lược đồ đầu tiên ... > dòng (thường là dòng thứ hai trong tệp DotNetConfig.xsd).

<xs:include schemaLocation="YOUR_DIRECTORY\namespace.assemblyname.xsd"/> 

Tệp DotNetConfig.xsd có thể tìm thấy trong thư mục cài đặt Visual Studio 8 (hoặc 9) trong thư mục con Xml \ Schemas.

+1

+1. Các lược đồ thường bị bỏ qua khi nói đến các phần cấu hình tùy chỉnh. Chúng cực kỳ hữu ích khi bạn quản trị hoặc đồng lo phải thực hiện các thay đổi đối với app.config hoặc web.config của bạn. –

+2

Tôi có giải pháp tốt hơn. Có thể yêu cầu VS 2010, không chắc chắn :) http://stackoverflow.com/questions/1127315/how-do-i-make-an-extension-xsd-for-the-web-app-config-schema/7977168#7977168 –

+3

có cách nào để tạo "YOUR_DIRECTORY \ namespace.assemblyname.xsd" không? Hay tôi chỉ phải viết nó bằng tay? – NSjonas

4

Nếu bạn không muốn sửa đổi DotNetConfig.xsd của mình, bạn có thể thêm cấu hình xsd "inline".

Trong trường hợp của bạn thêm các thuộc tính sau vào phần tùy chỉnh

<ServiceContainers xmlns="your_xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="your_xmlns location_of_your_schema"> 

     <Registration .... 

</ServiceContainers> 

này rất hữu ích trong khi thử nghiệm một XSD tại địa phương vì location_of_your_schema có thể là một con đường địa phương và khi bạn đã sẵn sàng để thay đổi sản xuất location_of_your_schema đến url công khai của tệp xsd. Lưu ý rằng thuộc tính xsi: schemaLocation phải chứa các cặp chuỗi được phân tách bằng dấu cách trong đó chuỗi đầu tiên trong mỗi cặp là một không gian tên URI và chuỗi thứ hai là vị trí của lược đồ.

+1

Xin chào, tôi biết đây là một năm trước. Tôi đã thử điều này nhưng tôi nhận được 'không được công nhận thuộc tính 'xmlns: xsi'. Lưu ý rằng tên thuộc tính phân biệt chữ hoa chữ thường.' khi tôi chạy ứng dụng của mình. Ứng dụng của tôi chạy nếu tôi xóa các thuộc tính bạn đã đề cập, nhưng sau đó tôi mất Intellisense. Bạn có biết tại sao nó gây ra lỗi thời gian chạy? Cảm ơn trước –

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