2011-03-03 19 views
4

我有一個MSBuild腳本以下任務:XMLUPDATE任務沒有更新我的XML文件

<XmlUpdate 
    Namespace="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd" 
    XmlFileName="$(PackageDir)\temp\OddEnds.Testing\OddEnds.Testing.nuspec" 
    XPath="/package/metadata/version" 
    Value="%(OddEndsTestingAsmInfo.Version)" /> 

這應該更新與裝配版本的NuGet規範文件的空version節點。我.nuspec文件看起來像這樣:

<?xml version="1.0" encoding="utf-8"?> 
<package xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http:www.w3.org/2001/XMLSchema-instance"> 
    <metadata xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> 
     <id>OddEnds</id> 
     <authors>Tomas Lycken</authors> 

     <!-- Here's the node I want to update --> 
     <version></version> 

     <owners>Tomas Lycken</owners> 
     <description>Odd ends and bits that I might need in any project.</description> 
    </metadata> 
</package> 

相信XPath的指針/package/metadata/version指向右邊節點(因爲如果我將其更改爲別的,就抱怨沒有找到節點),但輸出表示0 node(s) selected for update.

我錯過了什麼?

+0

其中一個創舉重複的使用:HTTP:/ /stackoverflow.com/questions/11345/xpaths-and-default-namespaces。它是通過http://www.google.com/search?q=site%3Astackoverflow.com+xpath+default+namespace – 2011-03-04 21:56:02

回答

1

我和NuGet,XmlUpdate,MSBuild和XPath有完全相同的問題。

最後我切換到項目的NuGetPack任務。
(注意的NuGet任務是(至少現在)只在Nightly Build可用)

使用該任務,然後會看在某種程度上像下面的代碼片段通過的MSBuild添加的版本號到您的NuGet包:

<Target Name="NuGet"> 
    <GetAssemblyIdentity AssemblyFiles="$(BuildCompileDirectory)\$(AssemblyName).dll"> 
    <Output TaskParameter="Assemblies" ItemName="AssemblyIdentities"/> 
    </GetAssemblyIdentity> 

    <NuGetPack 
    ToolPath="$(ToolsDirectory)" 
    WorkingDirectory="$(BuildCompileDirectory)" 
    File="$(SrcDirectory)\$(SolutionName).nuspec" 
    Version="%(AssemblyIdentities.Version)"/> 
</Target> 

希望有幫助!

+0

你在哪裏可以找到NuGetPack任務?我從http://msbuildtasks.tigris.org/安裝了最新的Nightly Build,並且沒有NuGetPack任務。我收到NuGetPack沒有定義的錯誤。 – Tomas

+0

您是否在MSBuild腳本中導入了社區任務目標文件? 您也可以在這裏瞭解我是如何做到的:https://github.com/martinbuberl/NUnitHelpers/blob/master/src /NUnitHelpers.msbuild –

+0

當我這樣做時,NuGetPack任務由於某種原因運行TWICE。在第二次運行期間,所有路徑信息都會丟失,導致錯誤。任何想法爲什麼發生這種情況? – James

1

你的任務將需要看起來像這樣:

<XmlUpdate 
    Prefix="xmlsucks" 
    Namespace="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd" 
    XmlFileName="$(PackageDir)\temp\OddEnds.Testing\OddEnds.Testing.nuspec" 
    XPath="/xmlsucks:package/xmlsucks:metadata/xmlsucks:version" 
    Value="%(OddEndsTestingAsmInfo.Version)" /> 

隨意前綴改爲任何貶義詞你想:-)