1

我正在创建一个 Visual Studio 2013 包 (vsix)(无耻插件:pMixins)。作为我使用TeamCity作为持续集成服务器的一部分,我已将 Team City 配置为构建 .vsix 包(Visual Studio Package (vsix) - Team City without Visual Studio installed)。

现在我想配置 Team City 以在 VSIX架构中设置版本:

<?xml version="1.0" encoding="utf-8"?>
<PackageManifest 
    Version="2.0.0" 
    xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" 
    xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
    <Metadata>
        <Identity  Version="1.0" Language="en-US" Publisher="Company" />

按照使用 msbuild 中的建议,我想使用来自 teamcity 的值更新配置文件以及如何从 MSBuild 脚本更新 XML 属性?我已更新Microsoft.VsSDK.targets为将XmlPoke与以下目标一起使用:

<Target 
     Name="UpdateVSIXVersion" 
     BeforeTargets="PrepareForBuild" 
     Condition="$(VSIXVersion) != '' And $(VSIXVersion) != '*Undefined*'">

    <Message Text= "Updating VSIX Version" />

    <XmlPoke 
        XmlInputPath="source.extension.vsixmanifest"
        Query="/PackageManifest/Metadata/Identity/@Version"
        Value="$(VSIXVersion)">         
    </XmlPoke>      
 </Target>

我使用要设置的系统参数更新了 Team City VSIXVersion

Team City系统参数截图

但是,当我检查 TeamCity 时,它进行了 0 次替换:

团队城市建设日志

如何让 Team City 正确更新 .vsixmanifest xml?

4

1 回答 1

4

经过大量搜索后,我终于发现 XmlPoke 需要一个namespace当 Xml 文件包含命名空间时,即使对于默认命名空间(在 MSBuild 项目中修改 .config 文件)也是如此。

但是,我找不到该XmlPoke.Namespaces参数的任何文档,并且上面引用的代码不起作用。经过多次尝试一个错误,我终于让它与这个一起工作:

<Target 
    Name="UpdateVSIXVersion" 
    BeforeTargets="PrepareForBuild" 
    Condition="$(VSIXVersion) != '' And $(VSIXVersion) != '*Undefined*'">

    <Message Text= "Updating VSIX Version" />

    <XmlPoke 
        XmlInputPath="source.extension.vsixmanifest"
        Query="/n:PackageManifest/n:Metadata/n:Identity/@Version"
        Value="$(VSIXVersion)"
        Namespaces="&lt;Namespace Prefix='n' Uri='http://schemas.microsoft.com/developer/vsx-schema/2011' Name='DoNotKnowWhatThisIsFor-ButItIsRequired' /&gt;">
    </XmlPoke>      

笔记:

  • 这需要在 Team City 上配置 MSBuild 12
  • 命名空间需要转义。
  • Name 参数是必需的,否则 MSBuild 会报错
  • 必须使用人工命名空间前缀来更新原始 XPath 查询。

如果有人需要,MSBuild 文件在 Github 上:https ://github.com/ppittle/pMixins/blob/master/tools/vssdk_tools/v12.0/VSSDK/Microsoft.VsSDK.targets

于 2014-06-20T13:43:42.560 回答