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

时间:2013-06-24 18:23:20

标签: c# nuget-package

将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()

1 个答案:

答案 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" }