1

nuget パッケージを介して読み込んだファイルの名前を変更しようとしています。

次のようにファイルを取得できることはわかっています。

$f = $project.ProjectItems | ForEach-Object { $_.ProjectItems } | where { $_.Name -eq "MyFile.cs.custom" } 

また、次のようにそのファイルを削除できることも知っています。

$f.Delete()

そのファイルの名前を変更するための構文を探しています。私はちょうどやってみました:

$project.ProjectItems | ForEach { $_.ProjectItems } | Where { $_.Name -eq "MyFile.cs.custom" } | Foreach {Rename-Item $_.Name ($_.FileNames -replace "\.custom", "")}

そして、それはうまくいきませんでした

install.ps1 ファイル全体は次のとおりです。

param($installPath, $toolsPath, $package, $project)

#save the project file first - this commits the changes made by nuget before this     script runs.
$project.Save()

$project.ProjectItems | ForEach { $_.ProjectItems } | Where { $_.Name -eq "MyFile.cs.custom" } | Foreach {Rename-Item $_.Name ($_.FileNames -replace "\.custom", "")}

$project.Save()

csprojファイルのプロジェクトスタートアップオブジェクトをプロジェクトにまだ存在しないクラスに変更するだけで、これを回避することになりました。

4

3 に答える 3

1

少なくとも私にとってはうまくいくので、誰かに役立つことを願っています。このコードでは、ルート フォルダー (たとえば、C:\projects\SomeProject\FolderConfig\") でフォルダー "FolderConfig" を探し、ファイルの名前を変更します。フォルダー "FolderConfig" でフィルターを削除し、これらのファイルを検索できます。すべてのプロジェクト。

$project.ProjectItems | where { $_.Name -eq "FolderConfig" } |
ForEach { $_.ProjectItems } |  where { $_.Name -eq "Test.config"} |
ForEach { $_.Name = "NewTest.config" }
于 2016-03-22T14:59:27.963 に答える
0

ProjectItems が FileInfo 型であるとは思えないので、これを試してください:

$project.ProjectItems | ForEach { $_.ProjectItems } | 
    Where { $_.Name -eq "MyFile.cs.custom" } |  
    Foreach {Rename-Item $_.Name ($_.FileNames -replace "\.custom", "")}

PowerShellがcdされていることを保証できない限り、ファイルのフルネーム(パス)に対応するアイテムのプロパティを見つける必要があると思います(名前変更アイテムのパスとして使用します)ファイルを含むディレクトリ。

-replaceまた、正規表現のメタ文字を使用していることにも注意してください。

FileNames単一の文字列で複数のファイル名を返す場合があることに注意してください。

于 2013-02-07T02:38:52.273 に答える
0

install.ps1 ファイルは次のようになります。

param($installPath, $toolsPath, $package, $project)

$file1 = $project.ProjectItems.Item("test.exe")
$file2 = $project.ProjectItems.Item("test.config")

// set 'Copy To Output Directory' to 'Copy if newer'
$copyToOutput1 = $file1.Properties.Item("CopyToOutputDirectory")
$copyToOutput1.Value = 2

$copyToOutput2 = $file2.Properties.Item("CopyToOutputDirectory")
$copyToOutput2.Value = 2
于 2013-02-07T05:14:21.927 に答える