【问题标题】:Using XmlUpdate to set Version information from an Assembly使用 XmlUpdate 从程序集中设置版本信息
【发布时间】:2012-12-26 23:16:16
【问题描述】:

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

  1. 从程序集中获取版本信息。
  2. 使用该版本信息更新 .nuspec 文件。

我的 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 任务运行两次:第一次,Assembly 版本丢失但路径正确,第二次 Assembly 版本正确但路径丢失!

这是输出:

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 任务,但得到了类似的结果。非常感谢您的帮助!

【问题讨论】:

    标签: msbuild msbuildcommunitytasks


    【解决方案1】:

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

    我没有通过连接指定路径(例如 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>
    

    我希望这对其他人有帮助!

    【讨论】:

      猜你喜欢
      • 2021-01-26
      • 2011-12-09
      • 1970-01-01
      • 2015-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-13
      • 2010-12-31
      相关资源
      最近更新 更多