0x49D1

0L4g0YDQsNC30YDQsNCx0L7RgtC60LUsINC00LvRjyDRgNCw0LfRgNCw0LHQvtGC0YfQuNC60L7QsiA=

Автообновления!(ClickOnce при наличии файлов лишь косвенно входящих в состав проекта)


Как минимум SQLCELogViewer будет использоваться несколькими людьми и надо как-то просто до них доносить изменения. Пока-просто ради юзер тестов, затем, возможно и для регулярных обновлений. Не долго думая я выбрал ClickOnce. Решение не сильно гибкое и сразу натолкнулся на проблемы с проектом, который сильно зависит от различных внешних библиотек, которые автообновляются через пакетный менеджер и не все из которых-написаны в «управляемой среде». Как известно ClickOnce не позволяет включать в дистрибутив файлы, не относящиеся к проекту. А в моем случае это кучка библиотек, нужных для автономной работы SQLCE, без надобности установки всего пакета локальной базы на клиентах, при этом их нельзя подключить к проекту через Add Reference диалог(COM :() и они должны или лежать в одной директории с SQLCE драйвером, или в СТРОГО прописанных директориях(/x86, /amd64). Перечислим, что НЕ подходит:

  • Add Existing Items-> add — нет, потому что при обновлении файлов- их надо не забыть снова подменить. Мелочь, но я хочу автоматизированное решение!
  • Add Existing Items-> add as a link — замечательно работает, если директория с библиотеками не ПОД проектом. Иначе работает аналогично Include In Project, что не устраивает, так как портит структуру директорий при развертывании и SQLCE отказывается работать(получиться что-то типа: ..\packages\SqlServerCompact.4.0.8482.1\NativeBinaries\x86\Microsoft.VC90.CRT).


Понадобилось 19 попыток билда, чтоб разобраться, как же это делать с наименьшим количеством строк кода. Спасибо статье и stackoverflow!
Ответ заключается в том, что ClickOnce нужно знать про эти файлы причем определенную информацию(так называемый DeploymentManifestFile). Мне не надо многого, так что в данной ситуации все решается расширением блока *.csproj файла. Я там явно указываю, где и какие файлы искать и добавить в паблишинг лист:

<ItemGroup>
    <Content Include="$(TargetDir)x86\*.dll">
      <Link>x86\%(FileName)%(Extension)</Link>
      <Visible>false</Visible>
    </Content>
</ItemGroup>
<ItemGroup>
    <Content Include="$(TargetDir)x86\Microsoft.VC90.CRT\*.dll">
      <Link>x86\Microsoft.VC90.CRT\%(FileName)%(Extension)</Link>
      <Visible>false</Visible>
    </Content>
</ItemGroup>

шикааарно!
Есть. Вот готовый ClickOnce. Сорс там же.
З.Ы. буду благодарен за предложения других решений.

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: