将Install.ps1脚本与Nuget包一起使用,我正在尝试将代码添加到Global.asax.cs文件中以进行自定义。使用我的Install.ps1脚本,-replace命令不起作用。事实上,我无法将任何文本分配给变量$ a我正在使用-replace并将其写入“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()
答案 0 :(得分: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" }