更新私有库Visual Studio Extension

时间:2017-02-28 19:03:54

标签: visual-studio visual-studio-extensions atom-feed visual-studio-gallery

我们有一个Visual Studio Extension,我们在私人图库中托管。安装了初始版本后,如果返回扩展和更新页面,则会看到它在已安装扩展列表中列出。突出显示它会显示[禁用]和[卸载]链接,在右侧窗格中,可以看到正确的'创建者','安装日期'版本&# 39;并且自动更新此扩展程序'检查。

当我们准备更新时,我们会执行以下发布过程:

  1. 在AssemblyInfo.cs中,我们更新了' AssemblyVersion'和' AssemblyFileVersion'到下一个版本,例如" 1.12.1.0"
  2. 在source.extension.vsixmanifest中,我们更新了'版本'到下一个版本(我们使用相同的值,即" 1.12.1.0")
  3. 然后我们签署VSIX包
  4. 然后我们将VSIX文件放在我们的私人图库
  5. 然后我们更新atom.xml文件 - 稍后会详细介绍。 atom.xml文件恰好存在于与VSIX相同的文件夹中,因为我们只有有限数量的这些扩展。
  6. 但是,当您启动Visual Studio时,扩展程序不会自动更新,当您访问“扩展程序和更新”时,它也不会显示为更新。因此,必须通知用户新版本,然后手动卸载现有版本,并安装更新。

    好的,我非常确定VSIX文件本身没有任何不妥之处;我怀疑atom.xml可能有问题。关于如何创建atom.xml文件有几篇文章,但这些文章之间存在一些不一致,例如: MSDNjustinmchaseKornfeld Eliyahu Peterstackoverflow等。

    好。这是我的atom.xml(稍加编辑)

    <?xml version="1.0" encoding="utf-8"?>
    <feed xmlns="http://www.w3.org/2005/Atom">
      <title type="text">Our Extension Gallery</title>
      <id>uuid:b62cf56a-8a60-4eb6-b217-5e2972e01b39;id=1</id>
      <updated>2017-02-28T11:57:22Z</updated>
      <entry>
        <id>MyAssemblyName.Microsoft.0681eb6c-4275-4d64-9333-dfdabe14f286</id>
        <title type="text">Description One</title>
        <summary type="text">Description Two</summary>
        <published>2017-01-31T11:57:22Z</published>
        <updated>2017-02-28T11:57:22Z</updated>
        <author>
          <name>Me!</name>
        </author>
        <content type="octet/stream" src="http://server/VisualStudioGallery/MyAssemblyName.vsix" />
        <Vsix
          xmlns:xsd="http://www.w3.org/2001/XMLSchema"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns="http://schemas.microsoft.com/developer/vsx-syndication-schema/2010">
          <Id>0681eb6c-4275-4d64-9333-dfdabe14f286</Id>
          <Version>1.12.1.0</Version>
        </Vsix>
      </entry>
    </feed>
    

    那么我们在atom.xml中更新了什么?

    • 进料/更新
    • 进料/进入/更新
    • 进料/进入/ VSIX /版本

    日期格式

    • 在一些例子中,我已经看过&#39; 2011-04-14T14:24:22-07:00&#39; 我见过的其他人&#39; 2012-11-06T22:19:45Z&#39;这有关系吗?

    • 我尝试过使用&#34; Time&#34;部分为&#39; T00:00:01Z&#39;以防万一,UTC,服务器和客户端时间之间存在任何混淆。没有成功。

    &#39;的进料/进入/ ID &#39; vs&#39; Feed / entry / Vsix / Id &#39;

    • 我是否为这些XML元素提供了正确的套管?

    • 对于&#39; feed / entry / id&#39;,我发现要下载我需要有&#39; MyAssemblyName.Microsoft.0681eb6c-4275-4d64-9333-dfdabe14f286&#39;,但是对于Feed / entry / Vsix / Id,它只是&#39; 0681eb6c-4275-4d64-9333-dfdabe14f286&#39;。

    我觉得我对XML的每一部分都进行了修改,但无济于事。我确定它很简单......但那是什么让我失望。

    由于

    格里夫

2 个答案:

答案 0 :(得分:2)

  1. 对于&#39; feed / entry / id&#39;,这是条目的唯一ID。它必须与VSIX包的id完全相同!

  2. 对于feed / entry / Vsix / Id,这是VSIX包的id。

  3. 请将其修改为与vsix软件包的产品ID相同。

    enter image description here

答案 1 :(得分:0)

感谢Cole Wu的有用评论,我终于让它发挥了作用。

需要匹配的两个ID才能使更新生效。

所以,只是为了澄清我有以下内容:

<强>的AssemblyInfo.cs

[assembly: AssemblyVersion("1.15.0.0")]
[assembly: AssemblyFileVersion("1.15.0.0")]

<强> source.extension.manifest

ProductID: MyApplication.Microsoft.0681eb6c-4275-4d64-9333-dfdabe14f286
Version: 1.15

<强>使用atom.xml

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="text">Our Extension Gallery</title>
  <id>uuid:b62cf56a-8a60-4eb6-b217-5e2972e01b39;id=1</id>
  <updated>2017-02-28T00:00:01Z</updated>
  <entry>
    <id>MyApplication.Microsoft.0681eb6c-4275-4d64-9333-dfdabe14f286</id>
    <title type="text">Description 1</title>
    <summary type="text">Description 2</summary>
    <published>2017-01-31T00:00:01Z</published>
    <updated>2017-03-01T00:00:01Z</updated>
    <author>
      <name>Me</name>
    </author>
    <content type="octet/stream" src="http://server/VisualStudioGallery/application.vsix" />
    <Vsix
      xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="http://schemas.microsoft.com/developer/vsx-syndication-schema/2010">
      <Id>MyApplication.Microsoft.0681eb6c-4275-4d64-9333-dfdabe14f286</Id>
      <Version>1.15</Version>
    </Vsix>
  </entry>
</feed>
  • feed / entry / id = feed / entry / Vsix / Id = source.extension.manifest.ProductID
  • feed / entry / Vsix / Version = source.extension.manifest.Version