2015-09-04 102 views
1

我有一個構建腳本來修改一些用於工作的Nuget * .nuspec相關性版本 - 但不知何故,它不再存在。我不知道是否因爲更新到Windows 10或Powershell版本而更改。打開XML,修改並再次保存

Function ChangeNugetSpecDependencyVersion() { 

    Param(
     [Parameter(Mandatory=$true)] 
     [string]$filePath, 
     [Parameter(Mandatory=$true)] 
     [string]$packageId, 
     [Parameter(Mandatory=$true)] 
     [string]$publishVersion 
    ) 

    [xml] $toFile = (Get-Content $filePath) 

    $nodes = $toFile.SelectNodes("//package/metadata/dependencies/dependency[starts-with(@id, $packageId)]") 
    if ($nodes) { 
     foreach ($node in $nodes) { 
      $nodeId = $node.id 
      Write-Host "-- Updating '$nodeId' in '$filePath' to version '$publishVersion'" 
      $node.version = "[" + $publishVersion +"]" 
      $toFile.Save($filePath) 
     } 
    } 
} 

# Version 
$version = "2.0.0.0" 

# Assemblies 
$assemblies = "NerveFramework", "NerveFramework.EntityFramework" 

# Change dependency version on all depending assemblies 
Write-Host "Changing the NuGet Spec version dependencies to '$version'..." 
$nuspecFiles = Get-ChildItem $assemblies -Filter "NerveFramework*.nuspec" -Recurse | Resolve-Path -Relative 
foreach ($nuspecFile in $nuspecFiles) { 
    ChangeNugetSpecDependencyVersion $nuspecFile "NerveFramework" $version 
} 

錯誤是$toFile.Save($filePath),它說:

Exception calling "Save" with "1" argument(s): "En del af stien 'C:\Users\Jan\NerveFramework.EntityFramework\NerveFramework.EntityFramework.nuspec' blev ikke fundet." At C:\GitHub\nerve-framework\BuildFunctions.ps1:58 char:13 + $toFile.Save($filePath) + ~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : DotNetMethodException

對不起,部分丹麥語言,但它說,它無法找到路徑的一部分。

這裏有一件事是這條道路:C:\Users\Jan\NerveFramework.EntityFramework\NerveFramework.EntityFramework.nuspec是錯誤的。

文件位置是相對於執行命令文件:C:\GitHub\nerve-framework\NerveFramework.EntityFramework\NerveFramework.EntityFramework.nuspec

但它可以打開該文件,但爲什麼被保存功能則提供了錯誤的路徑?

回答

1

爲什麼你根本用Resolve-Path?您應該通過ChangeNugetSpecDepdencyVersion函數的完整路徑:

此外,在該函數中,您可以調用$toFile.Save($filePath) foreach節點 - 而不是隻有一次(最後)。

並且最後一個節點:對於Update-NugetSpecDependyVersion等功能,您應該使用approved verbs,並省略尾部()。例如:

Function Update-NugetSpecDependencyVersion 
{ 
    Param 
    (
     [Parameter(Mandatory=$true)] 
     [string]$filePath, 
     [Parameter(Mandatory=$true)] 
     [string]$packageId, 
     [Parameter(Mandatory=$true)] 
     [string]$publishVersion 
    ) 

    [xml] $toFile = (Get-Content $filePath) 

    $nodes = $toFile.SelectNodes("//package/metadata/dependencies/dependency[starts-with(@id, $packageId)]") 
    foreach ($node in $nodes) 
    { 
     Write-Host ("-- Updating '{0}' in '{1}' to version '{2}'" -f $node.id, $filePath, $publishVersion) 
     $node.version = "[{0}]" -f $publishVersion 
    } 

    $toFile.Save($filePath) 

} 

# Version 
$version = "2.0.0.0" 

# Assemblies 
$assemblies = "NerveFramework", "NerveFramework.EntityFramework" 

# Change dependency version on all depending assemblies 
Write-Host "Changing the NuGet Spec version dependencies to '$version'..." 
Get-ChildItem $assemblies -Filter "NerveFramework*.nuspec" -Recurse | 
     % { Update-NugetSpecDependencyVersion $_.FullName "NerveFramework" $version } 
+0

有了,我得到這個錯誤:https://gist.github.com/janhartmann/0b1de4d49b5859e794ed – janhartmann

+0

我編輯我的答案。再試一次 –

+0

好東西,現在就開始工作 - 將重寫我的其他函數以使用相同的語法。謝啦! – janhartmann

相關問題