Обновите атомы частной галереи, чтобы VS показывал, что доступно обновление расширения

Я использую Visual Studio Частная галерея, чтобы опубликовать 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

Я пробовал различные комбинации:

  • Увеличение номера версии в самом VSIX и в atom.xml
  • Изменение тега updated внутри тега entry на текущую дату и время
  • Изменение тега updated внутри тега feed на текущую дату и время
  • Изменение тега published внутри тега entry на текущую дату и время

Я ожидал, что комбинация 1, 2 и 3 должна быть достаточной, чтобы показать, что есть обновление, но безрезультатно. Это руководство, похоже, подтверждает мое ожидание:

  • Опубликовано - дата/время добавления добавочного номера.
  • Обновлено - дата/время, когда последнее обновление было обновлено.

Я также пробовал все 4 одновременно, также безрезультатно.

Я обслуживаю галерею из экземпляра Apache, и я подтвердил, что он устанавливает правильный заголовок Last-Modified для atom.xml.

Есть ли какой-то интервал, на который 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>

Я также должен отметить, что мое расширение не является строгим именем, поскольку оно использует неподписанную стороннюю сборку. Это имеет значение?

Ответы

Ответ 1

У меня была такая же проблема, и я провел глубокое расследование. В моем случае было странно, что мое расширение всегда показывалось как "Загрузка" в частной галерее вместо "Установлено" (Green Hook). Поэтому я догадался, что отсутствует ссылка между элементом Gallery и установленным элементом

Ответ так же прост, как раздражать:

Идентификатор должен быть "ИД". Таким образом, идентификатор продукта (в конфигурации VSIX) является ссылкой, которая должна быть в Atom файле.

В вашем случае:

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

Как вы видите: Withyout ваш "MyVSIX..". После этого он распознает ваше расширение и, если он установлен, также скроет кнопку "Загрузить" в галерее

Для обновления:

Достаточно, если вы увеличите Версия > .

Для цикла обновления (мой опыт):

  • Он проверяет запуск Visual Studio (один раз Daily, если включен параметр)
  • Он проверяет каждый раз, когда вы открываете "Расширения и обновления". Поэтому повторное открытие после сохранения XML должно быть достаточно.

EDIT: (спасибо за Upvote)

Здесь картинки для лучшего подталкивания (сделанные в VS2013, но почти такие же для VS2012)

Идентификатор в файле VSIX. VSIX ProductID

Как это должно выглядеть в Atom-Feedfile.

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

Как это должно выглядеть, если вы правильно связали между Gallery и VSIX File. Gallery Linking

Ответ 2

Мы попытались использовать atom.xml в частной галерее для автоматического обновления. Он вообще не работал, даже после удаления имени из идентификатора в теге VSIX. Мы используем пакет, разработанный для VS 2015.

Затем, глядя более внимательно, мы поняли, что идентификатор класса пакета, который также присутствует в файле vsct, отличается от идентификатора, определенного в файле манифеста: source.extension.vsixmanifest. Хотя первый - это чистый GUID, второй является конкатенацией имени, производителя и другого GUID. Что-то вроде: MyVSIX.MyCompany.GUID(в виде xxxxxxxx-xxxx...)

Когда мы использовали второй, все работало отлично. Нам даже удалось обновить пакеты, которые ранее были установлены, дважды щелкнув файл vsix.

Я хочу поблагодарить вас за то, что эта статья была очень хорошим началом для решения нашей проблемы.

Все самое лучшее, Dan Vasilescu

Ответ 3

похоже, что VS проверяет обновления только один раз в день, но я не смог заставить его обнаружить обновленное расширение в галерее Atom.