2010-07-12 61 views
2

嗨,我試圖使用webconfig中的appsettings指向一個單獨的配置文件,唯一的問題是配置文件被保存在一個單獨的項目中,是否可以在一個單獨的項目中引用一個應用程序配置?web config <appSettings file =「config file in separate projects」></ appSettings>

+0

「文件」屬性的目的是爲您的應用程序配置提供更大的靈活性。此外,路徑是**相對**。這是爲了允許不同的部署配置等。爲什麼你要在另一個項目中指定一個特定的文件?複製單獨的文件而不是鏈接到單獨的文件會更有意義(這可能會影響部署)。 – 2010-07-12 10:50:57

+0

嗨Jaroslav我們擁有針對不同環境的配置,例如本地,開發,升級,活在一個名爲Configuration的獨立類項目中,所以我只需要指向當前環境的相關文件的位置。這不是我的建議,我知道這可能不是最好的方式,但在這個實例我只是遵循命令 – Matthew 2010-07-12 11:07:15

回答

1

最好不要在項目外尋找配置。請記住,配置文件是運行時文件,因此它們通常需要位於應用程序根目錄的相同目錄或子目錄中。如果您指向根路徑之外的文件夾,當有人決定移動應用程序的物理位置併爲其使用虛擬目錄時,可能會遇到麻煩。

如果你想有一個配置文件是多個項目的共同點,我發現ConfigGen是一個很好的解決方案。它是一個配置生成器,爲不同的機器創建一個不同的(或者你的情況相同的)配置文件。它使用以下典型命令行,其中-s是一個設置xml文件,其中包含特定於環境的差異以注入各種輸出文件。 -t是一個模板文件,它可以包含來自設置文件的設置的令牌佔位符。和-o是輸出文件夾:

cfg.exe -s AppSettings.Config.Settings.xls -t AppSettings.Config.Template.xml -o Configs -ves "EmptyString" 

在你的情況,你有你的設置和模板文件中的共享位置,並添加一個預生成步驟導入併產生本地AppSettings的文件。這需要一個稍微不同的命令行。我在BeforeBuild一步包裹它,你就會把你的csproj文件:

<Target Name="BeforeBuild"> 
    <Exec Command="cfg -s X:\sharedConfig\AppSettings.Config.Settings.xls 
    -t X:\sharedConfig\AppSettings.config.template.xml 
    -l -n $(ProjectDir)AppSettings.config" /> 
</Target> 

在這種情況下,X:\ sharedconfg \是你的模板和設置映射的位置,並有2個新的論據, -l和-n。 -l表示僅執行本地文件,因此它會在您的設置文件中查找與正在運行構建的機器相匹配的行。如果你沒有這樣的行,它會查找一個名爲「default」的行,這是你應該擁有的。

-n參數允許您指定要將輸出文件放入的確切位置。

所以,如果你把這個構建步驟放到你的項目之前,每一個都會生成相同的配置副本。

相關問題