使用XmlUpdate从程序集设置版本信息

时间:2012-12-26 23:16:16

标签: msbuild msbuildcommunitytasks

使用MSBuild和MSBuild社区任务我正在尝试做一些非常简单的事情:

  1. 从程序集中获取版本信息。
  2. 使用该版本信息更新.nuspec文件。
  3. 我的MSBuild目标如下所示:

    <Target Name="Package">
      <GetAssemblyIdentity AssemblyFiles="%(PackageDir.FullPath)\MyAssembly.dll">
        <Output TaskParameter="Assemblies" ItemName="AssemblyIdentity" />
      </GetAssemblyIdentity>
      <XmlUpdate 
         Prefix="nu"
         Namespace="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"
         XmlFileName="%(PackageDir.FullPath)\MyAssembly.nuspec"
         XPath="/nu:package/nu:metadata/nu:version"
         Value="%(AssemblyIdentity.Version)" />
    </Target>
    

    我遇到的问题是NuGetPack任务运行TWICE:第一次,程序集版本丢失但路径正确,第二次程序集版本正确但路径丢失了!

    这是输出:

    Updating Xml Document "D:\MyProject\package\MyAssembly.nuspec".
        1 node(s) selected for update.
      XmlUpdate Wrote: "".
      Updating Xml Document "\MyAssembly.nuspec".
    D:\MyProject\MyProject.build(64,9): error : Could not find file
     'D:\MyAssembly.nuspec'.
    Done Building Project "D:\MyProject\MyProject.build" (Package target(s)
    ) -- FAILED.
    

    我也尝试过使用NuGetPack任务,但得到了类似的结果。非常感谢帮助!

1 个答案:

答案 0 :(得分:10)

我似乎已经解决了它,但我仍然不确定为什么原始问题中的代码不起作用。

我没有通过连接指定路径(例如AssemblyFiles =“%(PackageDir.FullPath)\ MyAssembly.dll”),而是将每条路径放入自己的项目中:

<ItemGroup>
...
  <PackageVersionAssembly Include=".\build-artifacts\package\MyAssembly.dll"/>
  <NuSpecFile Include=".\build-artifacts\package\MyAssembly.nuspec"/>
...
</ItemGroup>

我对任务进行了相同的更改,并对.nuspec文件的引用进行了相同的更改。

新的Package目标如下所示:

<Target Name="Package">
  <GetAssemblyIdentity AssemblyFiles="@(PackageVersionAssembly)">
    <Output TaskParameter="Assemblies" ItemName="AssemblyIdentity" />
  </GetAssemblyIdentity>
  <XmlUpdate 
     Prefix="nu"
     Namespace="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"
     XmlFileName="@(NuSpecFile)"
     XPath="/nu:package/nu:metadata/nu:version"
     Value="%(AssemblyIdentity.Version)" />
</Target>

我希望这有助于其他人!