存储nuget包的设置。有没有更好的办法?

时间:2011-05-27 16:13:21

标签: c# nuget

我有console application that is available via nugeton it's own。它被安装到NuGet包的tools目录中。该应用程序需要3条“配置”信息。

  • 数据库连接字符串
  • 文件夹路径
  • 另外一个配置选项(字符串)

目前,我将这些配置值存储在一个名为settings.js的文件中紧邻exe的文本文件中,序列化为json。

首次运行应用程序时,如果该文件不存在,则会创建一个具有默认值的文件。

我将settings.js文件保存在此位置,以便将文件检入源代码管理中。

我的问题是关于跨版本维护设置文件。 如果您通过nuget进行Update-Package,一切都很有效,除了新版本没有我配置的任何设置,因为为新版本创建了一个新文件夹。

我已经编写了一个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
    }
}

此外,使用命令行工具(nuget.exe)安装软件包时,init.ps1似乎无法运行。这是预期的行为吗?

1 个答案:

答案 0 :(得分:1)

您可以访问System.Environment.GetFolderPath吗?我只是在ApplicationData特殊文件夹下创建一个文件夹,并将设置存储在那里。