2009-11-25 27 views
5

Tôi đang cố gắng thực hiện chính xác điều tương tự được đề cập trong số previous question gần đây này. Về bản chất, đây là trường hợp (được chính xác tình hình của tôi giống nhau):Cài đặt ứng dụng trên một tệp .config khác không được cập nhật

Kế hoạch của tôi là phải có những (appSettings) trong tập tin riêng của họ (Settings.config), mà Ta sẽ ban sửa đổi quyền cho người dùng quy trình web tài khoản và lưu trữ tất cả các cài đặt có thể chỉnh sửa trong tệp này (ví dụ: diễn đàn tiêu đề, mô tả, v.v.).

Vấn đề là giải pháp chấp nhận trong câu hỏi đó không làm việc cho tôi bởi vì thay vì tiết kiệm appSettings trong file config riêng biệt, khi tôi thực hiện lệnh config.Save(ConfigurationSaveMode.Minimal, false), nó tái tạo tất cả các appSettings của riêng tập tin vào phần appSettings của tập tin web.config chính (với những thay đổi mới). Đây là mã cuối cùng của tôi (trong vb.net):

Public Shared Function GetAppSetting(ByVal setting As String) As String 
    Dim config As System.Configuration.Configuration = _ 
      WebConfigurationManager.OpenWebConfiguration("~") 

    Return config.AppSettings.Settings(setting).Value 
End Function 

Public Shared Sub SetAppSetting(ByVal setting As String, ByVal value As String) 
    Dim config As System.Configuration.Configuration = _ 
      WebConfigurationManager.OpenWebConfiguration("~") 

    config.AppSettings.Settings(setting).Value = value 

    config.Save(ConfigurationSaveMode.Minimal, False) 
    ConfigurationManager.RefreshSection("appSettings") 
End Sub 

Về cơ bản tôi không thể nhìn thấy nơi tôi sẽ được chỉ ra rằng tôi muốn các thiết lập được lưu trên tập tin riêng biệt thay vì trên web.config đó là nơi chúng được lưu trữ theo mặc định. Oh và nhân tiện, tôi phải thêm thuộc tính 'file =' vào phần appSettings của web.config để cài đặt Settings.config sẽ được đưa vào thực tế. Không có thuộc tính đó, mã trên không đọc các thiết lập tệp .config riêng biệt. Dưới đây là một bản chụp của phần appSettings web.config của tôi:

<appSettings file="Settings.config"> 
    <add key="RestartApp" value="-1" /> 
    </appSettings> 

Và đây là toàn bộ nội dung của file Settings.config tôi:

<appSettings> 
    <add key="AppTitle" value="MVC Web Access" /> 
    <add key="DefaultWebpage" /> 
    <add key="CustomCSS" /> 
    <add key="TktsEmailTo" value="[email protected]" /> 
    <add key="EmailFrom" value="[email protected]" /> 
    <add key="EmailFromSMTP" value="mail.email.com" /> 
    <add key="EmailFromPW" value="fakePassword" /> 
    </appSettings> 

Vì vậy, thay vì kết thúc với cài đặt sửa đổi trên tập tin Settings.config của tôi sau lệnh .save, phần appSettings của tôi trên tệp web.config kết thúc như thế này (và tệp Settings.config vẫn không bị ảnh hưởng):

<appSettings file="Settings.config"> 
    <add key="RestartApp" value="-1" /> 
    <add key="AppTitle" value="New title" /> 
    <add key="DefaultWebpage" value="index.aspx" /> 
    <add key="CustomCSS" /> 
    <add key="TktsEmailTo" value="[email protected]" /> 
    <add key="EmailFrom" value="[email protected]" /> 
    <add key="EmailFromSMTP" value="mail.email.com" /> 
    <add key="EmailFromPW" value="NewFakePassword" /> 
    </appSettings> 
+0

Hmm, tôi sẽ xem xét mã của tôi và xem liệu tôi có thể phát hiện bất kỳ khác biệt nào với những gì bạn đang thực hiện hay không ... –

+0

Kurt - ví dụ của tôi * là * sử dụng tệp .config riêng biệt và chỉ có kiểm tra kỹ, nó hoạt động tốt với nó. –

+0

Câu trả lời của tôi cho câu hỏi trước đã tập trung vào việc nhận được mã đã được đăng hoạt động - mã chỉ thao tác trên web.config. Tôi thực sự không chắc chắn liệu bạn có thể làm điều này với một tập tin cấu hình riêng biệt ... trừ khi Keith đã thực sự làm theo cách đó. –

Trả lời

2

Chỉ cần kiểm tra lại - sự khác biệt duy nhất tôi có thể thấy là tôi đang sử dụng

 
<appSettings configSource="Settings.config"/> 

Dưới đây là đoạn code Tôi đang sử dụng bây giờ, mà là làm việc và tiết kiệm các thiết lập để cài đặt tập tin riêng của tôi (Settings.config):

 
var config = WebConfigurationManager.OpenWebConfiguration("~"); 

foreach (var key in collection.Keys) 
{ 
    if (config.AppSettings.Settings[key.ToString()] != null) 
    { 
     config.AppSettings.Settings[key.ToString()].Value = collection[key.ToString()]; 
    } 
} 

config.Save(ConfigurationSaveMode.Minimal, false); 
ConfigurationManager.RefreshSection("appSettings"); 

Điều gì xảy ra nếu bạn sử dụng configSource trên phím appSettings?

+0

Tôi sẽ thử xem ... Tôi đã đọc về cài đặt này nhưng không thử vì tôi hiểu rằng nếu được sử dụng, tôi có thể có cả tệp .config bên ngoài với các appSettings riêng biệt và cũng có các cài đặt ứng dụng bổ sung trên phần tương ứng của tệp web.config.Về cơ bản, tôi muốn giữ cài đặt "" để cung cấp cho người dùng tùy chọn khởi động lại ứng dụng và không phải lúc nào cũng khởi động lại trên thay đổi appSettings. Nhưng dù sao, tôi sẽ kiểm tra tùy chọn này và trở lại với phản ứng. Cảm ơn. –

+0

Tôi gặp vấn đề tương tự. Chuyển sang configSource đã giải quyết được sự cố của tôi. Cảm ơn. –

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