3

我创建了一个包含 web.config.transform 文件的包 - 即在安装包时将添加到解决方案中现有 web.config 的部分 web.config。在这个 web.config.transform 中,我有(显示部分代码):

<add name="**NAME**-Local" connectionString="data source=**DB SERVER**;initial catalog=**DATABASE**;user id=**USER ID**;password=**PASSWORD**;" providerName="System.Data.SqlClient" />

当开发人员将此包添加到他们的解决方案中,将上面的代码行添加到连接字符串元素时,具有双星号的部分在每个应用程序中都会有所不同。例如,开发人员 1 正在开发一个应用程序,其数据库服务器名为“WidgetsDb”。好的,所以“WidgetsDb”将用双星号替换 DB SERVER。太好了,现在开发人员 2 正在开发一个使用名为“BicyclesDb”的数据库服务器的应用程序。因此,正如您所见,这两个开发人员使用不同的数据库服务器。

我设想解决方案类似于在安装 NuGet 包时弹出一个提示用户他们的数据库服务器名称、他们的数据库名称、用户 ID 是什么、密码是什么等的弹出窗口。所有这些数据将在上面看到双星号的连接字符串中使用。我希望我说得通。这可能吗?我知道您可以在包中引用不同的令牌,例如 $rootnamespace$、$id$、$version$、$author$ 等。

4

1 回答 1

3

我会使用 powershell 构建的表单来收集输入。这可以通过将 install.ps1 文件添加到您的包中来实现,该文件将在安装包时运行。此代码示例大致是您在安装包期间创建表单并使其弹出所需的内容。$databaseName.Text 将包含他们输入的任何内容。

param($installPath, $toolsPath, $package, $project)

    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 

    $objForm = New-Object System.Windows.Forms.Form 
    $objForm.Text = "Data Entry Form"
    $objForm.Size = New-Object System.Drawing.Size(300,200) 
    $objForm.StartPosition = "CenterScreen"

    $objForm.KeyPreview = $True
    $objForm.Add_KeyDown({if ($_.KeyCode -eq "Enter") 
        {$x=$databaseName.Text;$objForm.Close()}})
    $objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape") 
        {$objForm.Close()}})

    $OKButton = New-Object System.Windows.Forms.Button
    $OKButton.Location = New-Object System.Drawing.Size(75,120)
    $OKButton.Size = New-Object System.Drawing.Size(75,23)
    $OKButton.Text = "OK"
    $OKButton.Add_Click({$objForm.Close()})
    $objForm.Controls.Add($OKButton)

    $CancelButton = New-Object System.Windows.Forms.Button
    $CancelButton.Location = New-Object System.Drawing.Size(150,120)
    $CancelButton.Size = New-Object System.Drawing.Size(75,23)
    $CancelButton.Text = "Cancel"
    $CancelButton.Add_Click({$objForm.Close()})
    $objForm.Controls.Add($CancelButton)

    $objLabel = New-Object System.Windows.Forms.Label
    $objLabel.Location = New-Object System.Drawing.Size(10,20) 
    $objLabel.Size = New-Object System.Drawing.Size(280,20) 
    $objLabel.Text = "Please enter the database name in the space below:"
    $objForm.Controls.Add($objLabel) 

    $databaseName = New-Object System.Windows.Forms.TextBox 
    $databaseName.Location = New-Object System.Drawing.Size(10,40) 
    $databaseName.Size = New-Object System.Drawing.Size(260,20) 
    $objForm.Controls.Add($databaseName) 

    $objForm.Topmost = $True

    $objForm.Add_Shown({$objForm.Activate()})
    [void] $objForm.ShowDialog()

扩展此表单以捕获您需要的任何其他内容应该很容易。

于 2014-01-29T15:25:48.893 回答