更新私人库的原子,使得VS显示有一个扩展更新可用。

17
我正在使用Visual Studio 私有库 发布一个针对公司内部的VSIX。 我的VSIX出现在“扩展和更新”中的“在线”部分中,并且我可以从那里安装它: VSIX可从“在线”安装 然而,一旦安装完成,我不能确定如何更新我的扩展程序,在同一对话框盒内让它显示在“更新”部分,也无法让 Visual Studio 通知我有更新可用。 即使是新版本,VSIX也不会出现在“更新”窗格中 我尝试了以下各种组合:
  1. 在VSIX本身和atom.xml中增加版本号。
  2. 更改entry标签内的updated标记为当前日期和时间。
  3. 更改feed标签内的updated标记为当前日期和时间。
  4. 更改entry标签内的published标记为当前日期和时间。

我的期望是,1、2、3的组合足以显示更新,但徒劳无功。这个指南似乎证实了我的期望:

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

我也尝试过同时更改这4个标记,但也没有效果。

我将为您翻译有关编程的内容。在我的Apache实例中提供了画廊服务,并且我已经确认atom.xml的Last-Modified header已经正确设置。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个回答

18

我曾经遇到同样的问题并进行了深入调查。在我的情况下,奇怪的是,我的扩展程序总是在私人库中显示为“下载”而不是“已安装”(绿色勾号)。所以我猜测库项和已安装项之间存在缺失的链接。

答案很简单,但却很烦人:

ID必须是 "THE ID"。 因此,产品ID(在VSIX配置中)是Atom文件中必须引用的参考。

在您的情况中:

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

如您所见:没有您的“MyVSIX…”。

之后它将识别您的扩展,如果已安装,则还会在库中隐藏“下载”按钮。

升级:

只需增加<Version>内容即可。

关于升级周期(我的经验):

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

编辑:(感谢点赞)

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

在 VSIX 文件中的 ID。VSIX ProductID

Atom-Feedfile 中的样子应该是这样的。

<Vsix>
    <Id>d4d50729-a612-4260-9b2e-3a61ad5e2207</Id>
</Vsix>   
如果您正确地将图库和 VSIX 文件链接起来,它应该看起来像这样。 Gallery Linking

非常感谢,那个有效!只是为了明确起见,我们正在讨论<Vsix>元素内部的<Id>元素。 - daxelrod
1
感谢您的反馈。我已经在示例中添加了VSIX标签以澄清位置。 - Adrian von Allmen
非常好 - 谢谢!仍然想知道为什么微软在其私人图库指南中将扩展名+..的名称放在id前面。 - mYnDstrEAm

4
我们尝试在私有库中使用 atom.xml 实现自动更新,但并没有成功。即使将 VSIX 标签中的名称删除后,问题依然存在。我们使用的是为 VS 2015 开发的包。
后来,我们仔细查看后发现,包类别的 ID(也出现在 vsct 文件中)与清单文件 source.extension.vsixmanifest 中定义的 ID 不同。前者是一个纯 GUID,而后者是名称、生产商和另一个 GUID 的组合。例如: MyVSIX.MyCompany.GUID (形式为 xxxxxxxx-xxxx...)。
当我们使用后者时,一切都很完美。我们甚至成功地更新了以前通过双击 vsix 文件安装的包。
我要感谢这篇文章,因为它是解决我们问题的好起点。
祝一切顺利, Dan Vasilescu

1
似乎VS只会每天检查一次更新,但我无法让它在Atom插件库中检测到更新的扩展。

很遗憾,即使过了几天,仍然没有更新的迹象。 - daxelrod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接