У меня была точно такая же проблема, но в приложении Angular2, и эта статья просто решила его: https://medium.com/@s_eschweiler/using-external-libraries-with-angular-2-87e06db8e5d1 # .p6gra5eli
Резюме статьи:
npm install lodash --save
tsd install underscore
System.config({
paths: {
lodash: './node_modules/lodash/index.js'
import * as _ from ‘lodash’;
Надеюсь, это может быть полезно и для вашего случая
Я думаю , Блок приложений Updater был чем-то вроде предшественника ClickOnce. Могло бы стоить исследовать. Рассмотрения его исходного кода могло бы быть достаточно для зажигания некоторых идей.
У нас есть коммерческий продукт с открытым исходным кодом: wyBuild & amp; wyUpdate . Он имеет возможность исправления и очень прост в использовании.
Редактировать: меня голосуют за отрицательные цифры, но мой пост был не просто вопиющей продажей. Наш апдейтер wyUpdate имеет открытый исходный код, написан на C # и лицензирован по лицензии BSD.
Я подумал, что это может помочь любому, кто пытается создать программу обновления с нуля, используя .NET Framework.
Но, если хотите, проголосуйте за меня.
Приблизительно 3-4 года назад я опубликовал пример, который находится вне приложения, если обновление обнаруживается, приложение звонит, updater ответ закрывается, то обновления сделаны, и перезапуски приложения.
я опубликовал пример на старом сайте GotDotNet... Я должен буду попытаться найти его.
Это работало прекрасное и заняло приблизительно 1-2 часа для записи.
У Indigo Rose есть продукт под названием TrueUpdate , который также делает это для вас. Я использовал их в прошлом как из управляемых, так и из неуправляемых приложений. Это в основном файл, который вы помещаете на свой сервер (http, ftp, что вам нравится). Затем вы вызываете EXE на стороне клиента, чтобы проверить наличие обновлений. Файл обновлений извлекается и имеет логику для определения версии клиента (ваш выбор, обнаружение DLL, чтение ключа реестра и т. Д.). Затем он найдет подходящий для него апдейтер и загрузит файл для исполнения. Он хорошо работает и через прокси.
Единственное, что они не делают, это на самом деле создают патчи для вас. Вы должны сделать это вручную или с другим продуктом, который они имеют. Это коммерческое решение, и оно работает довольно хорошо, хотя, если вам это нужно.
Как начальная точка для прокрутки Вашего собственного, на это, вероятно, стоит посмотреть статья Alex Feinman о MSDN, наделенном правом, "Создавая Самообновление Приложений с.NET Компактная Платформа".
Напиши свое.
Я слышал, что их несколько сложно написать в первый раз, но после этого все становится просто.
Так как я еще не написал (хотя он есть в моем списке), я могу дать вам некоторые вещи, о которых я думал. Поддерживайте точные версии DLL, так как это важно для самостоятельного обновления. И убедитесь, что программа обновления может обновляться сама.
В одном проекте с использованием .NET Compact Framework 1.0 я написал приложение для автоматического обновления. Мы использовали функцию развертывания CAB в SqlCE для загрузки файлов на устройство (теперь вы использовали бы Sync Framework), и у нас был отдельный exe-файл, который выполнял распаковку CAB и обновление файлов.
Обновление будет выглядеть следующим образом: пользователю будет предложено обновить его, нажать кнопку и выйти из приложения пользовательского интерфейса. Обновление exe-файла вступит во владение, получит файл cab с сервера, создаст резервную копию текущих dll и распакует файл cab с помощью wceload Пользовательский интерфейс будет перезапущен, и в случае сбоя обновление будет отменено. Это все еще интересный сценарий для компактных устройств, но сейчас есть лучшие инструменты, чем просто sqlce.
Я бы, конечно, посмотрел на блок приложения обновлений и каркас синхронизации, чтобы реализовать это, если clickonce не вариант. Но я предполагаю, что вам все еще понадобится отдельный исполняемый файл, потому что библиотеки, которые вы хотите перезаписать, вероятно, заблокированы файлом во время использования exe, как уже говорилось в одном из предыдущих ответов.
В Вашем файле Program.cs делают что-то вроде этого:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Update();
Application.Run(new Form1());
}
private static void Update()
{
string mainFolder;
string updateFolder;
string backupFolder;
foreach (string file in
System.IO.Directory.GetFiles(updateFolder))
{
string newFile = file.Replace(
updateFolder, mainFolder);
if (System.IO.File.Exists(newFile))
{
System.IO.File.Replace(file, newFile, backupFolder);
}
else
{
System.IO.File.Move(file, newFile);
}
}
}
Кроме того, это может быть сделано рекурсивным для взятия структуры каталогов при необходимости. Это позволит Вам обновлять любой .dll в своем проекте; все, на самом деле, за пределами основного .exe. Тогда где-то в другом месте в рамках Вашего приложения можно иметь дело с получением файлов с сервера (или везде, где), который должен быть обновлен, помещает тогда в updateFolder и перезапускает приложение.
Я записал свой собственный autoupdater, autoupdater использует общий файл конфигурации для приложения, которое содержит URL для загрузки последних версий с / проверка, если это должно обновить.
Этот способ, которым Вы выполняете updater, который или обновляет приложение или нет, затем запускает приложение, который как часть нормального функционирования, проверяет на обновленный updater и патчи это.