Обновите атомы частной галереи, чтобы 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.