我创建了一个包含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 $等。
答案 0 :(得分: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()
扩展此表单以捕获您需要的任何其他内容应该很容易。