更新私有图库原子,以便VS显示扩展更新可用

时间:2013-12-11 19:32:50

标签: visual-studio visual-studio-2012 visual-studio-extensions vsix atom-feed

我正在使用Visual Studio Private Gallery向我的公司发布内部VSIX。我的VSIX出现在Visual Studio 2012中“扩展和更新”的“在线”部分,我可以从那里安装它: VSIX available to install from "Online"

但是,一旦安装完毕,我无法弄清楚如何更新我的扩展程序,使其显示在同一对话框的“更新”部分中,也无法弄清楚如何制作Visual Studio通知我有可用的更新。 VSIX doesn't appear in "Updates" pane even though it's a newer version than installed

我尝试了以下各种组合:

  1. 增加VSIX本身和atom.xml中的版本号
  2. updated标记内的entry标记更改为当前日期和时间
  3. updated标记内的feed标记更改为当前日期和时间
  4. published标记内的entry标记更改为当前日期和时间
  5. 我的期望是1,2和3的组合应足以表明有更新,但无济于事。 This guide似乎证实了我的期望:

      
        
    • 已发布 - 添加扩展程序的日期/时间。
    •   
    • 已更新 - 上次更新扩展程序的日期/时间。
    •   

    我也同时尝试了所有4个,也无济于事。

    我正在从Apache实例服务该库,我已经确认它正在为atom.xml设置正确的Last-Modified标头。

    是否有一些Visual Studio检查更新的时间间隔?打开“扩展和更新”的“更新”部分是否会强制Visual Studio检查?

    这是我的atom.xml的内容:

    <?xml version="1.0" encoding="utf-8" ?>
    <feed xmlns="http://www.w3.org/2005/Atom">
      <title type="text">Visual Studio Extension Gallery</title>
      <id>uuid:CDC295B0-7885-4B59-9BDF-F059A9F4B338;id=1</id>
      <updated>2013-12-11T19:00:00Z</updated>
      <entry>
        <id>MyVSIX..b242c6de-d0a6-4ba1-9672-b866e36607d3</id>
        <title type="text">MyVSIX</title>
        <summary type="text">MyVSIX is a nifty extension that does things.</summary>
        <published>2013-12-11T19:00:00Z</published>
        <updated>2013-12-11T19:00:00Z</updated>
        <author>
          <name>daxelrod</name>
        </author>
        <content type="application/octet-stream" src="vsix/MyVSIX.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>MyVSIX..b242c6de-d0a6-4ba1-9672-b866e36607d3</Id>
          <Version>0.5</Version>
          <References />
          <Rating xsi:nil="true" />
          <RatingCount xsi:nil="true" />
          <DownloadCount xsi:nil="true" />
        </Vsix>
      </entry>
    </feed>
    

    我还应该注意,我的扩展名不是强名称签名,因为它使用了未签名的第三方程序集。这有什么不同吗?

3 个答案:

答案 0 :(得分:17)

我有同样的问题并做了一些深入的调查。在我的情况下,奇怪的是,我的扩展程序在私人图库中始终显示为“下载”,而不是“已安装”(绿色挂钩)。所以我猜测Gallery项和已安装的Item之间缺少一个链接

答案就像烦人一样简单:

ID必须是“THE ID”。 因此,产品ID(在VSIX配置中)是必须在Atom-File中的引用。

在你的情况下:

<Vsix>
    <Id>b242c6de-d0a6-4ba1-9672-b866e36607d3</Id>
</Vsix>

如你所见:没有你的“MyVSIX ......”。 之后它将识别你的扩展,如果安装也隐藏了Gallery中的“下载”按钮

更新:

如果你增加&lt;版本&gt; 内容。

更新周期(我的经验):

  • 它检查Visual Studio的启动(每天一次,如果启用了选项)
  • 每次打开“扩展和更新”时都会检查。因此,在保存XML之后重新打开就足够了。

编辑: (感谢Upvote)

这里的图片是为了更好地理解(在VS2013中制作,但在VS2012中几乎相同)

VSIX文件中的ID。 VSIX ProductID

它在Atom-Feedfile中应该是什么样子。

<Vsix>
    <Id>d4d50729-a612-4260-9b2e-3a61ad5e2207</Id>
</Vsix>   

如果您在Gallery和VSIX File之间正确链接,它应该如何显示。 Gallery Linking

答案 1 :(得分:3)

我们尝试在私有图库中使用atom.xml进行自动更新。即使从VSIX标记中的ID中删除名称,它也根本不起作用。我们正在使用为VS 2015开发的软件包。

然后,仔细观察,我们意识到vsct文件中也存在的包类的ID与清单文件中定义的ID不同:source.extension.vsixmanifest。虽然第一个是纯GUID,但第二个是名称,生产者和另一个GUID的串联。 就像是: MyVSIX.MyCompany.GUID(以xxxxxxxx-xxxx的形式......)

当我们使用第二个时,一切都很完美。我们甚至设法通过双击vsix文件来更新以前安装的软件包。

我要感谢你,因为这篇文章是解决我们问题的一个很好的开始。

一切顺利, 丹·瓦西里斯库

答案 2 :(得分:1)

看起来VS每天只会检查一次更新,但我无法让它在Atom图库中检测到更新的扩展名。