Задачки на подумать
Как говорил, всё пишется в один каталог.
-----
Не клади плугины в каталог программы. Проверено - создает головную боль.
В твоем случае - в случае когда тебе надо иметь несколько версий - стоит класть каждый плугин в отдельную папку. Туда же - зависимые либы. Ну или хотя бы одна папка под каждую версию.
Не говоря уже о том, что все плагины нужно было было обновить.
-----
Ну это еще пустяки. Иногда непонятно что начинать крутить.
Я вот на 2017 еще не перехожу. Да, надо бы, но как подумаю что придется все перенастроить... лучше подожду 2020...
я что то не уверен что он вообще будет иметь туды доступ.
-----
У нас, для юзеров на машинах работающих со станками, вообще все что можно обрезано.
И все одно иногда умудряются что-то угробить... ну папочку там потрут из Саве-диалога...
Гораздо проще это сделать в диалоге "О программе".
-----
Когда Я это сделал первый раз - получил по шее - Я не стал парсить строку подключения к базе и показал ее целиком.
Поправил почти сразу. Потом, когда все усложнилось, туда прописались все детали по проге и плугинам Абоут стала первой страницей куда смотрят при возникновении проблем.
Это вообще в голове не укладывается.
-----
Ну это еще чего... Я как-то попробовал использовать Опен/Саве диалог... так, как рекомендовано мелкомягкими для расширения стандартной формы... Вот там был цирк с конями... что-то, однако, работало, а что-то так и не получилось сделать - проще было реализовать новую форму...
Уверяю тебя, MSI работает предсказуемо.
-----
Когда среда его работы идеальна - возможно.
Но приближенная к идеальной среда для МСИ - свежая винда в минимальной конфигурации.
В таком виде винда обычно не живет. Обычно идут наслоения с заменой каких-то компонентов.
Самый простой вариант проверки - использование инсталятора Студии - в 2015 невозможно
сказать - Поставь ВСЕ - инсталятор будет пыхтеть, но отвалится, оставив нерабочую Студию.
Так что - ой...
Не клади плугины в каталог программы.
А отчего думаешь задачка возникла?
Тут так, или всё в одной или в разных, с контролем версий. Работает и промежуточная стадия, когда все общие файлы в ехе, а то что к плагинам в отдельных, но это нормально работает, когда всего один проект. Раз настроил и забыл
"Всё в одной" - реализовать довольно просто, уж сколько раз делал, да и сейчас немного по другому сделал и работает.
А домейнами еще возится и возится, причём только дома.
Ну или хотя бы одна папка под каждую версию
Это вообще не канает. Сейчас всё грузится в один домейн.
Я вот на 2017 еще не перехожу...лучше подожду 2020
вот в 2020 как раз на 2017 и можно будет перейти
Мне проще, дали новый лапоть. Не совсем новый, от шефа, но и на том спасибо. Новые нам не подходят из за карточек расширения. Вместо того чтобы просто вставить карточку в лапоть, нужно таскать пару коробочек.
проще было реализовать новую форму
Это тоже нехорошо. Привыкают юзвери к системным диалогам. Я вот лично люблю файлики копировать из Save As диалога или "зип" запустить.
Хотя для диалога "выбора папок" приходится извращаться.
......
Я вот сейчас с ХМЛ сериализацией играюсь, стандартная вконец задолбала. Да и не нужно мне объекты восстанавливать, только их "содержание".
Тут так, или всё в одной или в разных
-----
У меня с моими, гораздо меньшими заморочками, и то возникает головная боль, когда оно в куче.
Чуток помогают атрибуты на классах, но сейчас появится порядка 100 + 20 плугинов под оборудование - надо будет что-то делать и скорее всего это что-то будет папкой с датой создания конфигурации оборудования.
Это вообще не канает. Сейчас всё грузится в один домейн.
------
Да ну? А какая связь между доменом куда все грузится и организацией размещения в файловой системе?
Это тоже нехорошо. Привыкают юзвери к системным диалогам.
-----
Это - нормально.
Мне нужен был диалог, используемый как стандартный диалог, но со своими прибамбахами, выходящими за рамки навигации/фильтрации.
Реализовать прибамбахи было относительно не сложно, но втиснуть их в стандартный диалог не получилось. Даже при том, что все доки и примеры имелись.
стандартная вконец задолбала.
-----
Хи-хи... Я уже давно забил... Что можно - стандартным, что нельзя - руками...
У меня с моими, гораздо меньшими заморочками, и то возникает головная боль, когда оно в куче.
У Мурки меньшие заморочки
Не знаю, отчего у тебя головная боль, может воздух плохой в помещении.
У нас количество всего гораздо меньше, а копировать все в одно гораздо проще.
Потому как любая автоматизация требует соединения с сервером. А из китая, например, это не так просто сделать.
А какая связь между доменом куда все грузится и организацией размещения в файловой системе?
Это типо "суслика". Не видишь а он есть.
Сможешь загрузить в один домейн две разные версии подписанной ДЛЛ-ки? У меня не получается.
Хи-хи... Я уже давно забил... Что можно - стандартным
Чтобы забить на "стандарт", нужно вначале иметь свой.
Пока вот так сделал. "1" - версия
StorageData storageDataItem = new StorageData(123, "namexxx", 12345678); using (XmlSerializerStorage storage = new XmlSerializerStorage("test.xml", 1, "Comment:Ser test")) { storageDataItem.Addition = "A1"; //storageData.Write(storage); storage.Write(storageDataItem, XmlSerializerStorage.ESerilizationType.AllFields); storageDataItem.Name = "test2"; storageDataItem.Addition = "A2"; storageDataItem.Write(storage); storageDataItem.Name = "test3"; storageDataItem.Addition = "A3"; storageDataItem.Write(storage); } using (XmlSerializerStorage storage = new XmlSerializerStorage("test.xml", 1)) { storageDataItem.Read(storage); storageDataItem.Read(storage); storageDataItem.Read(storage); }
У меня не получается.
-----
Ну так оно и правильно.
Блин, "надо покласть две разные, но одинаково поименованные ДЛЛки в одну папку" и не поиметь при этом ни гемороя, ни головной боли.
а копировать все в одно гораздо проще.
-----
Ну зип/рар - какая разница - оба распакуют заданную структуру.
Встроить распаковщик - уже лет 5 как без проблем.
в один домейн
-----
Вроде уже рассмотрели и пришли к заключению - доменов будет несколько.
Осталось решить сколько, какие и как разгрести либы по доменам.
Хочешь грести из одного каталога и еще копировать руками - ну делай себе геморой.
Я же их разношу по максимуму, чтобы из пути было понятно что используется.
Пока вот так сделал.
-----
В каждом классе - либо метод, либо фриенд-метод.
Что-то большое и продуманное писать уже лениво... лет 10-ть назад - можно было бы... а сейчас - лениво...
-----
На сейчас мне вот что интересно - как оформить хост для компиляции и выполнения шаблонов, так чтобы при внешней загрузке шаблонов их выполнение было безопасным для системы в многопользовательском режиме...
Как-то так...
Пока не представляю где коvырять...
две разные, но одинаково поименованные ДЛЛки в одну папку" и не поиметь при этом ни гемороя, ни головной боли.
Не ну если спрашивает что такой файл уже существует и заменяешь все равно конечно будет головнаяа боль. Да и мв говорим видимо о разных временных интервалах.
Я лично о времени полной перекомпиляции проекта.
Встроить распаковщик - уже лет 5 как без проблем.
А при чём здесь зип, врое ничего не говорили о нём.
Вроде уже рассмотрели и пришли к заключению - доменов будет несколько.
Это только мы с тобой так решили, а шеф грит - нефиг тратить время.
Осталось решить сколько, какие и как разгрести либы по доменам.
А что там решать, каталог каждого плагина в папочку, папочку в домейн.
В каждом классе - либо метод,
Ну так и есть, может быть даже вообще ничего. Что тебе не понравилось?
как оформить хост для компиляции и выполнения шаблонов
Как виртуалка не канает?
Не ну если спрашивает что такой файл уже существует и заменяешь
-----
Ну так именно этот геморой ты и хочешь поиметь.
Тебе предлагается покласть каждую фиговинку покласть в папку и рулить загрузкой как тебе надо.
Ну а ты упираешься и отвечаешь - я буду разбираться со скинутым в одну папку...
Я лично о времени полной перекомпиляции проекта.
-----
Или это где-то сбоку, или Я потерялся.
А при чём здесь зип, врое ничего не говорили о нём.
-----
Один файл и распаковка структуры каталогов как задано при упаковке.
Вроде как нормально для того что тебе надо.
а шеф грит
-----
Ты таки хочешь, чтобы Я удаленно убедил твоего шефа?
Ты мои софтовые скилсы учитываешь?
папочку в домейн
------
Там не так все легко... Я пару раз ковырял аппдомены - для меня там мало интересного было.
Что тебе не понравилось?
-----
Ручная работа. Даже при том что Я много генерирую.
Как виртуалка не канает?
-----
У меня в этом плане параноя - считается, что целью загрузки шаблонов будет роняние системы. Вот целенаправленные действия и надо предотвратить. И не забыть выполнить работу...
Ну так именно этот геморой ты и хочешь поиметь.
не вижу проблемы, rebuild all & copy
Тебе предлагается покласть каждую фиговинку покласть в папку и рулить загрузкой как тебе надо.
Это две совершенно разные проблемы
или Я потерялся.
Мы видимо о разных вещах думаем.
Я размышляю о времени когда папка ехешника только создается.
Один файл и распаковка структуры каталогов как задано при упаковке.
так до времени упаковки я еще и не дошел - это и есть "инсталлер". Нужно для начала сделать рабочую версию.
Ты таки хочешь, чтобы Я удаленно убедил твоего шефа?
Я тебя просто информирую что иметь разные версии шефу не требуется. И не надо его переубеждать, даже удалённо.
Там не так все легко...
Ну так IPC требуется когда домейны нужно подружить.
считается, что целью загрузки шаблонов будет роняние системы. Вот целенаправленные действия и надо предотвратить.
не дошло...
Ручная работа. Даже при том что Я много генерирую.
А где ты видишь ручную работу? Для ПОКО ка раз то что нужно, а для чего сложного как раз ручная работа и требуется
storage.Write(storageDataItem, XmlSerializerStorage.ESerilizationType.AllFields);
rebuild all & copy
Я размышляю о времени когда папка ехешника только создается.
------
Изначальная постановка задачи - загрузить нужную версию как апгрейд для существующей системы.
Если задача была изменена - Я не заметил.
не дошло...
-----
Надо защитится от
StartProcess("Format C: /Y")
Если задача была изменена - Я не заметил.
Задача осталась, обсуждение изменилось.
Кстати нашел еще пару вариантов: ILMerge
https://stackoverflow.com/questions/2460542/using-differen...
Extern alias
https://blogs.msdn.microsoft.com/ansonh/2006/09/27/extern-...
Хотя "свой локальный GAC" был бы видимо лучшим вариантом.
Надо защитится от StartProcess("Format C: /Y")
где? Просто на винде, первое что приходит в голову - UAC, привилегии...
ИЛмерге вот еще не пробовал - делать то почти ничего не надо
-----
Это линковщик - либо ты руками прописал что тебе надо и он собрал, либо снова на поле 1.
Вопрос об загрузке плугина вообще не стоит.
Второй линк заканчивается вот этим:
static void Main(string[] args){FooVersion1::Acme.Foo f1 = new FooVersion1::Acme.Foo();f1.Bar();FooVersion2::Acme.Foo f2 = new FooVersion2::Acme.Foo();f2.Goo();}
Тебе же нужно чтобы Фоо бралось из сменной библиотеки после линковки.
работы дофига.
-----
Хи-хи...
Это линковщик - либо ты руками прописал что тебе надо и он собрал
Там тоже проблем может быть
http://www.bjoernrochel.de/2009/07/07/how-to-shoot-yoursel...
не хочется все на себе пробовать....
Второй линк заканчивается вот этим
главное идея - можно враппер зафигачить динамический или еще что. Пока даже и не думал.
Вот знаешь на каком принципе ГАК работает? Я в эту сторону тоже не рыл.
работы дофига.
-----Хи-хи...
ну не для себя же делаю. Пока требуется проще, но быстрее.
можно враппер зафигачить динамический
-----
Статический. Статическая предлинковка. А у тебя - динамическая загрузка.
Т,е, либо ты заранее знаешь все используемые дллки, либо ловить нечего...
Вот знаешь на каком принципе ГАК работает?
-----
Имеет структуру каталогов в соответствии типами и версиями и хранит копии всех версий дллок.
Глубже не копал.
Пока требуется проще
-----
угу...
Пока требуется проще
-----
Днями полностью запутался (у меня чуток сложнее - плугины должны суммировать кое-какие данные при начальной загрузке... из других плугинов) в имплементации и загрузке плугинов. Чтобы прояснить кто кого и как загружает слепил небольшой проектик с чистыми плугинами, работающими с одним и тем же БО. Базовые классы не даю - можешь заменить чем нужно.
Манеджер плугинов - выделен, можно подстроить под любые нужды.
Спасибо конечно за исходники, но "простой вариант" у меня есть достаточно давно.
Причем твой не должен работать когда общие либы в одном месте, а либы плагина в другом.
Нашел другую проблему. А именно лицензия на использование ILMerge.ехе
Здесь пишут что коммерческое использование низзя
https://www.codeproject.com/Articles/17797/Gilma-GUI-for-t...
Туть на одной странице подтверждение, а на другой что это опен соурсе проект
https://www.microsoft.com/en-us/research/people/mbarnett/?...
https://github.com/Microsoft/ILMerge/blob/master/LICENSE
и коммерческое использование можно
еще вот пару ссылок нашел
https://www.codeproject.com/Articles/4352/Demystifying-the...
http://www.telerik.com/blogs/working-with-assemblies-in-th...