3

使用带有 Nuget 包的 Install.ps1 脚本,我试图将代码添加到 Global.asax.cs 文件以进行自定义。使用我的 Install.ps1 脚本,-replace 命令不起作用。事实上,我无法将任何文本分配给我正在使用 -replace 的变量 $a 并将其写入“Global.asax.cs”文件。涉及 -replace 和剪贴板的 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()
4

1 回答 1

0

据我所见,这条线存在一些问题,因为它不会返回任何内容:

$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" }
于 2013-06-24T19:11:22.387 回答