2012-07-05 98 views
3

我有一個引用另一個程序集(類庫)的Windows服務。在這個其他程序集中,我使用應用程序設置來存儲一些值。當我將所有需要的文件複製到服務器時,我可以在AssemblyName.dll.config文件中看到這些設置。更改.NET應用程序設置而不重新編譯

然而,當我在這個配置文件更改設置並重新啓動該服務不會有任何作用。即使我卸載/重新安裝服務,它仍會在運行時返回舊值。

配置文件:

<setting name="RecordLimit" serializeAs="String"> 
    <value>300</value> 
    </setting> 

代碼:

if (recordCount > Settings.Default.RecordLimit) //always 300 

所以,即使我在配置文件中的值更改爲400,並重新啓動甚至重新安裝服務,該值始終是300製作我認爲這個值存儲在編譯後的代碼中並從中返回。

我在做什麼錯了,是否有可能對應用程序設置的更改總是需要重新編譯並重新安裝(我明白,我可以使用Save()方法來更改代碼的設置,但這是一個Windows服務,所以使用此方法doesn似乎沒有道理)?

如果存儲在配置文件中這些設置沒有任何效果和設置存儲在編譯後的代碼,我可以安全地刪除這些配置文件?

如果這些設置可以不重新編譯我有什麼其他選擇保存設置,我可以更改,恕不recompling改變?

編輯:我剛剛刪除了AssemblyName.dll.config文件和代碼返回300,所以配置文件顯然是不相關的。

回答

0

引用DLL的exe可以在自己的配置中操作配置設置嗎?

你應該嘗試添加設置到exe.config作爲測試。

+0

這是一個Windows服務,以便建立一個能與Windows服務進行通信,將需要Windows服務來揭露一些類型的公共界面的UI。但即使這是可能的,經歷所有麻煩以更改簡單設置也沒有多大意義......此外,此代碼是由服務可執行文件引用的程序集執行的,而不是來自服務可執行文件本身。 – 2012-07-05 21:28:10

+0

對不起,我誤解了你,或者我沒有解釋我的意思是什麼。我的意思是服務運行的appname.exe具有自己的配置,我認爲(我可能是錯的)appname.exe.config可能會通過配置設置影響其任何引用的DLL設置。我並不想要一個用戶界面來操作,只需在appname.exe.config和服務重新啓動的記事本。對不起,如果我侮辱你的智力。 – 2012-07-05 21:32:34

+0

啊我看到了,你提到它是作爲可執行文件運行的DLL – 2012-07-05 21:34:39

0

我想這可能是實際使用的.config.dll文件在C:\ Users \ Username \ AppData(在Win7中)的某個地方。嘗試在該文件夾中搜索AssemblyName.dll,並且四處找尋應找到它。

+0

該服務使用installutil.exe安裝到C:\ Services \ ServiceName文件夾中。你是否認爲即使這樣安裝,它會在AppData文件夾中創建一個配置文件的副本,並使用它來代替安裝文件夾中的配置文件? – 2012-07-05 21:38:48

+0

我自己也有類似的問題,我很肯定這是我如何修復它。我知道它在AppData中創建了一些配置文件。 – 2012-07-05 21:41:01

+0

我剛剛在反射器類型工具中打開編譯後的DLL,發現這些值在Settings類中編譯。顯然這些值在運行時使用,配置文件中的值被忽略。因此,看起來操縱這些值的唯一方法是更改​​代碼中的設置並調用Save()方法。 – 2012-07-05 21:52:56

0

據我所知配置文件的工作方式,它必須在EXE級別:appname.exe.config服務/應用程序和web.config的網站/服務。

見問題/在Can someone provide a quick App.config/Web.config tutorial?參考答案。

+0

使用應用程序設置,任何程序集都可以有自己的設置和配置文件... – 2012-07-05 21:37:00

+0

這是否意味着一個DLL正在運行,因爲可執行文件會自動忽略其配置文件? – 2012-07-05 21:37:36

+0

@DeanK。我從來沒有見過這樣的事情。是的,它*有一個配置文件,但不會被使用。 – 2012-07-05 21:38:37

相關問題