2015-09-04 198 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

相关问题