使用nuget包中的PowerShell编辑Global.asax

本文关键字:编辑 Global asax PowerShell nuget 包中 使用 | 更新日期: 2023-09-27 18:19:39

使用带有Nuget Package的Install.ps1脚本,我正试图将代码添加到Global.asax.cs文件中以进行自定义。在我的Install.ps1脚本中,-replaces命令不起作用。事实上,我无法将任何文本分配给我使用的变量$a-replace,并将其写入"Global.asax.cs"文件。涉及-replaces和剪贴板的3行脚本可以在nuget之外使用"Windows PowerShell"。我知道变量$a正在传递剪贴板中的内容,因为注释掉"#$customGlobalAsax.Document.Selection.Copy()"会将剪贴板中的任何内容写入Global.asax.cs文件。有什么建议吗?谢谢

param($installPath, $toolsPath, $package, $project)
$customGlobalAsax = $project.ProjectItems | ForEach-Object { $_.ProjectItems } | where { $_.Name -eq "Global.asax.cs" }
$customGlobalAsax.Open()
$customGlobalAsax.Document.Activate()
$customGlobalAsax.Document.Selection.SelectAll() 
$customGlobalAsax.Document.Selection.Copy()
$a = [System.Windows.Forms.Clipboard]::GetText()  
$a = $a -replace "using Company.Web.Mvc.ViewBase;","using Company.Web.Mvc.ViewBase;`r`nusing Company.Web.Address;"
[System.Windows.Forms.Clipboard]::SetText($a)   
$customGlobalAsax.Document.Selection.Delete()
$customGlobalAsax.Document.Selection.Paste()

使用nuget包中的PowerShell编辑Global.asax

从我所看到的,这行有一些问题,因为它不会返回任何东西:

$customGlobalAsax = $project.ProjectItems | ForEach-Object { $_.ProjectItems } | where { $_.Name -eq "Global.asax.cs" }

以下是我的测试:

$directory = dir *
$directory | foreach {$_.name}

以上运行成功。

但以下内容一无所获:

$directory = dir *
$directory.name | foreach {$_.name}

我相信在后一种情况下$_.name代表不存在的$directory.name.name。

所以它看起来像你的脚本中的这一行

$customGlobalAsax = $project.ProjectItems | ForEach-Object { $_.ProjectItems } | where { $_.Name -eq "Global.asax.cs" }

应更改为:

  $customGlobalAsax = $project | ForEach-Object { $_.ProjectItems } | where { $_.Name -eq "Global.asax.cs" }