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