2010-04-30 29 views
21

Tôi có hai dự án độc lập trong giải pháp Visual Studio 2008 của mình. Cả hai đều có App.config riêng. Nhưng trong một dự án, tôi cần một hoặc hai thuộc tính được định nghĩa trong App.config của một dự án khác. Có thể chia sẻ một phần nội dung App.config từ dự án khác không?C#, chúng tôi có thể chia sẻ một số nội dung của App.config giữa các dự án không?

+1

Ditto [link] (http://stackoverflow.com/questions/426245/how-to-share-app-config) – nawfal

Trả lời

30

Có - tất nhiên. Bất kỳ phần cấu hình có thể được "ra ngoài" - ví dụ:

<appSettings configSource="AppSettings.DEV.config" /> 
<connectionStrings configSource="MyConnection.config" /> 

hoặc

<system.net> 
    <mailSettings> 
     <smtp configSource="smtp.TEST.config" /> 

vs

<system.net> 
    <mailSettings> 
     <smtp configSource="smtp.PROD.config" /> 

bất kỳ phần cấu hình có thể được đưa vào một tập tin riêng biệt mà có thể được chia sẻ giữa dự án - nhưng không có phần cấu hình nhóm và thật không may, đôi khi có đôi chút khó khăn để biết đó là cái gì. Ngoài ra, trong một số trường hợp, Visual Studio sẽ khiếu nại (sử dụng gạch dưới lượn sóng màu đỏ) rằng "configSource" được cho là không hợp lệ - nhưng nó - nó được xác định trên đối tượng ConfigurationSection trong hệ thống cấu hình .NET.

UPDATE:
một tính năng mà hầu như không đủ các nhà phát triển dường như biết và sử dụng là khả năng trong Visual Studio để thêm các tập tin hiện tại từ một dự án khác nhau như một liên kết:

alt text http://i44.tinypic.com/2vl5wls.png

Với điều này, bạn có thể thêm liên kết vào các tệp vào dự án cục bộ của bạn và chúng sẽ luôn được cập nhật. Tăng cường năng suất tuyệt vời nếu bạn cần thực hiện một số chia sẻ ở cấp tệp (như đối với các tệp cấu hình chung hoặc như vậy)!

+0

nhưng tệp đích, chẳng hạn như "MyConnection.config" trong ví dụ của bạn, phải nằm trong cùng thư mục hoặc thư mục con? – 5YrsLaterDBA

+1

@ 5YrsLaterDBA: có, nó phải nằm trong cùng thư mục hoặc thư mục con của chúng. Nó có thể là một "liên kết" tập tin trong Visual Studio, tuy nhiên - hoặc một liên kết cứng trên đĩa (NTFS liên kết - một "con trỏ" để một tập tin có vẻ và hoạt động như "The Real Thing") –

+0

Hmmm ... Tôi ước tôi mặc dù đã đề cập đến việc liên kết. lol. nhưng bạn đã bỏ qua một điều gì đó quan trọng, marc. –

0

Trong trường hợp đó, tôi nghĩ rằng việc sử dụng Cơ sở dữ liệu để lưu trữ một số dữ liệu cấu hình sẽ là lý tưởng. Mỗi ứng dụng thực hiện điều riêng của mình, nhưng họ nhìn vào một cơ sở dữ liệu được chia sẻ để có được những thông tin chung đó.

EDIT: Tôi đã nói quá sớm! Dường như cả OP và tôi đã học được điều gì đó về định cấu hình tệp = D

3

Hãy thử điều này:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings file="PROD.config"> 
    <add key="common.Currency" value="GBP" /> 
    </appSettings> 
</configuration> 
+0

vâng, nhưng thuộc tính "file =" chỉ hợp lệ trên phần - không có gì khác có thể được đưa vào các tệp bên ngoài với phương pháp đó ..... –

1

Chỉ có "chạy" app.config được sử dụng, nhưng bạn có thể đi bên ngoài như marc_s nói.

Bạn cũng có thể tạo tệp .Settings được "chia sẻ". Đi đến thuộc tính dự án "được chia sẻ", tab Cài đặt ở bên trái, tạo cài đặt với Phạm vi ứng dụng và đặt Công cụ sửa đổi truy cập ở phía trên thành Công khai. Trong dự án khác của bạn, bạn có thể sử dụng ClassLibrary1.Properties.Settings.Default.SettingName để truy cập nó. Nó sẽ được gõ mạnh mẽ, nhưng bạn có thể cần nó tại thời gian biên dịch.

+0

Nhưng không phải mã Cài đặt được tạo dựa trên ứng dụng. cấu hình của chạy cho kiên trì? Sau đó, bạn sẽ vẫn cần một bản sao của tệp đó cho mỗi ứng dụng đang chạy. – ProfK

+0

@ProfK: Vâng, bạn nói đúng. Các tập tin .settings có thể có giá trị mặc định mà kết thúc là 'DefaultSettingValueAttribute' trong mã, không giống như cài đặt ứng dụng thông thường trong app.config. Tuy nhiên, bất kỳ độ lệch nào từ các giá trị mặc định sẽ kết thúc trong mỗi app.config riêng lẻ. Kể từ khi các thiết lập được lưu trữ trong một phần trong app.config bạn có thể sử dụng một sự kết hợp của hai và bên ngoài nó với configSource trong khi vẫn giữ mặc định biên soạn và gõ mạnh mẽ. Tôi đoán tất cả phụ thuộc vào những gì bạn đang tìm kiếm. –

1

Điều tôi muốn làm, đặc biệt khi cố gắng phối hợp các phần tử ServiceModel giữa các thư viện và kiểm tra là sử dụng configSource để phân đoạn cấu hình trong thư viện đích và chỉ đơn giản là link/copy always các đoạn trong dự án thử nghiệm của tôi.

Bằng cách đó, tôi chỉ duy trì ở một vị trí.

Bạn có thể lấy nó một bước xa hơn và chỉ cần có một thư mục chung trong giải pháp và liên kết các đoạn trong tất cả các dự án.

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