System.Addin & ClickOnce - PullRequest
       16

System.Addin & ClickOnce

2 голосов
/ 13 декабря 2008

У меня раздражающий процесс сборки при использовании System.Addins API с ClickOnce. Использование System.Addins требует определенной структуры каталогов, а основной проект не ссылается напрямую на адаптеры, представления и контракты, что плохо работает с архитектурой ClickOnce.

Раздражающая часть процесса сборки заключается в том, что мне нужно скопировать, через событие после сборки, DLL-файлы из компонентов надстроек в каталог основного проекта приложения, а затем вручную ссылаться на эти файлы из основного проекта, так что ClickOnce будет включать их. Во-первых, для правильной сборки требуется 2 итерации сборки, во-вторых, это мешает управлению исходным кодом (я должен исключить скопированные dll-файлы надстройки из управления исходным кодом, иначе любые изменения, внесенные в них, потребуют проверки). *

Итак, мой вопрос, есть ли способ обойти этот взлом? Что-то более элегантное?

Ответы [ 5 ]

3 голосов
/ 30 декабря 2008

Я не могу полностью ответить на ваш вопрос, но, похоже, вы создаете развертывания ClickOnce через Visual Studio. Я бы отказался от этого метода и использовал бы вместо него MageUI . Это автономный исполняемый файл, который можно найти в пакете SDK, который будет генерировать файлы приложения и манифеста развертывания. Он поставляется с версией графического интерфейса (mageui.exe) и версией командной строки (mage.exe).

Маг может не избавиться от вашего события после сборки, но он должен избавиться от необходимости ссылаться на файлы, чтобы ClickOnce видел их.

0 голосов
/ 27 мая 2010

Я решил эту проблему, добавив конвейерные сборки как контент в основную структуру решения.

Для этого измените выходную папку с (/ bin / debug / bin / Release) на другую. Я использовал ../lib, иначе вы получите визуальную студию, которая не может сослаться на эту ошибку файла.

Создайте папки конвейера в вашем основном решении

  • \ AddInSideAdapters
  • \ AddInViews
  • \ Контракты
  • \ HostSideAdapters

Щелкните правой кнопкой мыши по каждой из папок и нажмите «добавить существующий элемент», чтобы просмотреть все файлы, а затем перейдите к папке ../lib (или там, где у вас есть выходной набор), а затем нажмите кнопку добавления (нажмите стрелка вниз) и нажмите «Добавить как ссылку».

Щелкните правой кнопкой мыши по каждому файлу и установите его в Content.

Это создаст файл обновления, указывающий на ваши сборки, и они будут включены в манифест clickonce.

0 голосов
/ 27 октября 2009

Решением, которое я использую, является наличие единой выходной папки для всех проектов. Каждый проект помещает свои собственные файлы в правильную подпапку. Проект начальной загрузки приложения также помещает свои библиотеки в выходную (корневую) папку. Когда вы затем создаете щелчки для загрузчика, он берет все содержимое из выходной папки.

Самое сложное - это на самом деле собрать все dll в нужном месте (и иметь каждый dll только один раз)

0 голосов
/ 13 декабря 2008

Спасибо за ваш вклад, в настоящее время я делаю это так, как вы упомянули; создать папку в моем проекте, и включить библиотеки, которые мне нужны. Это работает, но это уродливое решение, и это мешает Source Control.

Я знаю об ограничениях ClickOnce, я надеялся, что можно обойти это. Например, я где-то читал, что я могу использовать проекты развертывания для создания соответствующих зависимостей, необходимых в конкретной структуре. Проблема заключается в том, что после развертывания в общедоступном виде нет простого способа (в ClickOnce) обновить эти зависимости.

0 голосов
/ 13 декабря 2008

ClickOnce не позволяет устанавливать программное обеспечение там, где вы хотите. Он установит бинарный файл и dll в документы и настройки. Вы можете в свойствах своего проекта перейти на вкладку «Публикация» и выбрать «Файлы приложения», чтобы выбрать дополнительный файл для включения. Если для System.Addings требуется dll в определенной папке относительно вашей сборки, вы можете просто создать папку в своем проекте и включить отсюда dll. Это может сработать. Если нет, у меня нет "хака" или другого решения, clickonce - это здорово, но ограничено некоторыми функциями.

...