.NET ClickOnce не устанавливает обязательные файлы? - PullRequest
8 голосов
/ 09 июня 2009

У меня есть проект .NET, который использует Crystal Reports. Приложение распространяется с использованием ClickOnce. Все отлично работает, если на компьютере установлен Crystal. Однако не все конечные пользователи имеют Crystal Reports, установленный на их компьютерах. Эти пользователи получают следующую ошибку ...

"Невозможно установить или запустить приложение. Приложение требует, чтобы сборка CrystalDecisions.ReportAppServer.XmlSerialize версии 10.5.3700.0 сначала была установлена ​​в глобальном кэше сборок (GAC)."

Есть ли способ принудительной установки ClickOnce, чтобы убедиться, что установлена ​​необходимая версия?

Ответы [ 2 ]

11 голосов
/ 10 июня 2009

Нет. Существует много путаницы по поводу ClickOnce и предпосылок.

ClickOnce не выполняет ничего с предварительными требованиями. Ничего такого. ClickOnce копирует файлы с сервера на компьютер клиента и синхронизирует эти файлы при обновлении файлов на сервере - вот и все. Он не может помещать вещи в GAC, регистрировать dll, устанавливать файлы MSI и т. Д.

Беспорядок возникает при развертывании с Visual Studio. Когда вы публикуете, VS делает несколько вещей, которые на самом деле не имеют ничего общего с ClickOnce. С одной стороны, он создает хорошую HTML-страницу для вас с некоторыми ссылками на ваше развертывание. Кроме того, он позволяет выбирать из нескольких предварительных требований и создаст для вас exe-загрузчик. Я предполагаю, что вы сделали это для установки Crystal Reports. Загрузчик - это простой способ управлять несколькими предварительными требованиями. Вместо того чтобы указывать пользователю установить X, затем Y, затем Z перед установкой приложения, загрузчик делает эти три установки «бесшовными», поэтому они выглядят так, как будто это одна большая установка. Он также может пропустить установку prereq, если он уже есть у пользователя.

Если вы обратите внимание на html-страницу, которую генерирует VS, вы увидите две ссылки. Один к вашему файлу .application (развертывание ClickOnce) и один к исполняемому файлу загрузчика. Вы в значительной степени зависите от пользователей и должны полагаться на них, чтобы они читали страницу и запускали загрузчик, если это необходимо. Единственным исключением является .Net Framework, поскольку html-страница может проверить это с помощью строки UserAgent.

Если они не запустят загрузчик, они получат ошибки, очень похожие на ту, о которой вы спрашиваете.

Одно из возможных решений - написать код, чтобы проверить, установлен ли он. Он может проверить реестр или папку «Program Files»; все, что вам нужно сделать, чтобы убедиться, что он установлен. Затем выйдите изящно и сообщите пользователю, если у него его нет. Это будет работать до тех пор, пока вы выполняете проверку, прежде чем пытаться загрузить и использовать сборки Crystal.

Удачи! Пожалуйста, ответьте, если вы найдете лучшее решение.

0 голосов
/ 26 декабря 2010

В предварительных условиях выберите Отчет Crystsal для .Net Framework (НЕ Crystal Report для Visual Studio) и опубликуйте.

...