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

我希望它对某人有用,至少它对我有用。在这段代码中,我在根文件夹中查找文件夹“FolderConfig”(例如 C:\projects\SomeProject\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

我们的 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 回答
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 回答