3

Nuget パッケージで Install.ps1 スクリプトを使用して、カスタマイズの目的で Global.asax.cs ファイルにコードを追加しようとしています。私の Install.ps1 スクリプトでは、-replace コマンドが機能しません。実際、-replace で使用している変数 $a にテキストを割り当てて、「Global.asax.cs」ファイルに書き込むことはできません。-replace とクリップボードを含む 3 行のスクリプトは、nuget の外部の "Windows PowerShell" で動作します。「#$customGlobalAsax.Document.Selection.Copy()」をコメントアウトすると、クリップボードにあるものは何でも Global.asax.cs ファイルに書き込まれるため、変数 $a がクリップボードからコンテンツを渡していることはわかっています。助言がありますか?ありがとう。

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 に答える