2011-05-27 62 views
0

我有一個console application that is available via nugeton it's own。它被安裝到NuGet包的工具目錄中。該應用程序需要3個「配置」信息。存儲nuget包的設置。有沒有更好的辦法?

  • 數據庫連接字符串
  • 的文件夾路徑
  • 多了一個配置選項(串)

目前,我在一個文本文件旁邊的exe文件在存儲這些配置值文件名爲settings.js,序列化爲json。

當應用程序第一次運行時,如果文件不存在,它將創建一個具有默認值的文件。

我將settings.js文件保存在這個位置,以便將文件檢入源代碼管理。

我的問題是關於維護跨版本的設置文件。 如果你通過nuget更新包,除了新版本沒有我配置的任何設置,因爲有一個爲新版本創建的新文件夾,一切都很好。

我已經寫了一個powershell腳本來運行在init.ps1中從最新版本的包中提取設置,並且似乎可行。然而,這感覺有點骯髒,我想知道是否有更好的方法來解決這個問題,當使用nuget來提供我的應用程序。

param($installPath, $toolsPath, $package) 
Set-Alias hump (Join-Path $toolsPath hump.exe) 

$sorted_list = new-object system.collections.SortedList 
$parent_path = Join-Path $installPath ".." 
foreach($f in Get-ChildItem $parent_path -Filter Humpback* | Foreach {$_.FullName}){ 
    $sorted_list.Add($f,$f) 
} 
if($sorted_list.Count -gt 1){ 
    $old_path = $sorted_list.Values[$sorted_list.Count - 2] 
    $new_path = Join-Path $installPath "tools" 
    $current_settings = Join-Path $new_path "settings.js" 
    $has_current_settings = Test-Path $current_settings 
    if($has_current_settings -eq $false){ 
     $old_settings = Join-Path $old_path "tools\settings.js" 
     Copy-Item $old_settings $new_path 
    } 
} 

另外,init.ps1在使用命令行工具(nuget.exe)安裝包時似乎不運行。這是預期的行爲?

回答

1

你能訪問System.Environment.GetFolderPath嗎?我只需在ApplicationData特殊文件夾下創建一個文件夾,並將設置存儲在那裏。

+0

我已經遠離這個,因爲我想保持設置文件能夠檢查到源代碼管理。但是在思考它之後,這隻會在檢入和退出源代碼管理時在不同的用戶環境中產生另一個問題。我會稍微考慮一下這個問題的含義(關於應用程序的功能),但真的認爲這可能是處理這個問題的好方法。 – jasonmw 2011-05-27 17:37:38

+0

如果沒有本地settings.js,本地設置文件可以覆蓋應用程序設置版本,就像組裝分辨率一樣,我已經實現了這個功能。新安裝將在應用程序設置目錄中創建該文件,因此您必須明確地放置一個本地文件來覆蓋它。這似乎工作得很好,並幫助我支持更多場景。感謝你的回答! – jasonmw 2011-05-28 18:31:57

相關問題