Nuget Package Explorer-是否有方法提示用户在包中的某个文件中输入某个字段的值

Nuget Package Explorer-是否有方法提示用户在包中的某个文件中输入某个字段的值,nuget,nuget-package,Nuget,Nuget Package,我创建了一个包,其中包含一个web.config.transform文件,也就是说,在安装包时,将部分web.config添加到解决方案中现有的web.config中。在这个web.config.transform中,我有(显示部分代码): 当开发人员将这个包添加到他们的解决方案中,将上面的代码行添加到connectionstrings元素中时,每个应用程序中具有双星号的部分都会有所不同。例如,开发人员1正在开发一个数据库服务器名为“WidgetsDb”的应用程序。好的,“WidgetsDb

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


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


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

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

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()
扩展此表单以捕获您需要的任何其他内容应该很容易

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()