2016-12-07 15 views
0

我開發了Windows服務。它使用一個配置文件MyService.exe.config,看起來像這樣(只用一個簡單的設置,Prop1):編譯後手動添加到app.config中的讀取設置

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
     <section name="MyNamespace.MyService.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </sectionGroup> 
    </configSections> 
    <applicationSettings> 
    <MyNamespace.MyService.Properties.Settings> 

     <setting name="Prop1" serializeAs="String"> 
     <value>Foo</value> 
     </setting> 

    </MyNamespace.MyService.Properties.Settings> 
    </applicationSettings> 
</configuration> 

當我部署到客戶的生產環境,我需要手動添加上更多的設置配置文件,例如Prop2

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
     <section name="MyNamespace.MyService.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </sectionGroup> 
    </configSections> 
    <applicationSettings> 
    <MyNamespace.MyService.Properties.Settings> 

     <setting name="Prop1" serializeAs="String"> 
     <value>Foo</value> 
     </setting> 

     <setting name="Prop2" serializeAs="String"> 
     <value>Bar</value> 
     </setting> 

    </MyNamespace.MyService.Properties.Settings> 
    </applicationSettings> 
</configuration> 

現在,如果我開始這個代碼行的服務:

log.Debug(Properties.Settings.Default["Prop1"].ToString()); 
log.Debug(Properties.Settings.Default["Prop2"].ToString()); 

產生以下輸出:

Foo 
Impossibile trovare la proprietà di impostazione 'Prop2'. 
    in System.Configuration.SettingsBase.GetPropertyValueByName(String propertyName) 
    in System.Configuration.SettingsBase.get_Item(String propertyName) 
    in System.Configuration.ApplicationSettingsBase.GetPropertyValue(String propertyName) 
    in System.Configuration.ApplicationSettingsBase.get_Item(String propertyName) 
    in ... 

意大利語中的錯誤的意思是「無法找到設置屬性'Prop2'」。

如何在編譯後讀取添加到app.config的設置?

我想知道當應用程序已經部署時是否不可能向app.config添加新的設置,因爲每個設置都必須編譯並在Properties.Settings.Default中靜態提供。那麼爲了達到我想要的效果我應該使用我管理的設置文件,比如重新發明輪子?

+0

你改變了什麼配置?根目錄或bin文件夾中的一個? – xszaboj

+0

我不知道你的意思。我更改了MyService.exe.config,它位於與MyService.exe相同的文件夾中。 – bluish

+0

這應該是比......你改變配置後重新啓動服務嗎? – xszaboj

回答

-1

嗯,我發佈了一個想法,我認爲會工作,但回去測試自己,它沒有。 d ***。

所以這裏有一個建議,我經常使用的設置的東西不工作。

創建結構爲數據集(做最簡單的方法一個XML文件,這是編寫創建一個DatSet,填充它,並將其保存爲XML格式的短節目。

DataSet mydataset = new DataSet("myDataSet"); 
DataTable mydatatable = new DataTable("myDataTable"); 
mydatatable.Columns.Add(new DataColumn("myColumn1")); 
DataRow newrow = mydatatable.NewRow(); 
newrow["myColumn1"] = "somedata"; 
mydatatable.Rows.Add(newrow); 
mydataset.Tables.Add(mydatatable); 
mydataset.WriteXML(@"C:\mydataset.xml", XmlWriteMode.WriteSchema); 

這將創建您的基本XML文件。

非常重要!!!!!要序列數據集和/或數據表,你必須給他們的名字,當你創建它們:

new DataSet("mydataset") 

然後,只要你不強姦吃了XML結構的完整性,你可以在任何時候使用你最喜歡的文本編輯器添加行(甚至是列)到你的XML文件。

在您的應用程序中,您只需將XML文件讀回到DataSet中,並遍歷DataTable行(並通過每個DataTable創建多個)並進行相應處理。

DataSet myDataSet = new DataSet("mydataset"); 
myDataSet.ReadXml(@"C:\mydataset.xml") 
foreach (DataTable t in myDataSet.Tables) 
{ 
    foreach (DataRow r in t.Rows) 
    { 
     //process here 
    }    
} 

很重要!!!!!爲了處理數據,你必須使用XML文件中DataSet和DataTable的名字。

希望這會有所幫助。當我無法使用或無法訪問內置設置處理程序時,它已經爲我工作了很多次。它確實給你的編碼增加了一點時間,但是......

約翰

+0

嘿!爲什麼要投票? – John

相關問題