Вход на сайт
Веселая фича
NEW 17.01.13 00:51
в ответ AlexNek 16.01.13 23:01
Представление Длл, однако, будет именно синглетоном... Ну не грузит же приложение две Длл... Хотя... Linq, похоже, грузит...
Да, вопросик попутnый образовался - загрузить Длл разными способами Я вроде умею... интересует - Как загрузить единичный класс из Длл?!.
Да, вопросик попутnый образовался - загрузить Длл разными способами Я вроде умею... интересует - Как загрузить единичный класс из Длл?!.
NEW 17.01.13 10:38
в ответ Posmotrim 16.01.13 18:11
И так - код
[пре]
public class TTemplatesDll
{
string templateDir;
private TTemplatesDll()
{
}
private static TTemplatesDll instance;
public static TTemplatesDll Instance
{
get
{
if (instance == null)
{
instance = new TTemplatesDll();
instance.filename = defaultDllName;
}
return instance;
}
}
public static string TemplateDir
{
set
{
Instance.templateDir = value;
new TModules(value);
logger.Debug("TemplatesDir seted as " + value);
}
get
{
if (Instance.templateDir == null || Instance.templateDir == string.Empty)
{
throw new Exception("Pointer to Template's directory not initialized");
}
return Instance.templateDir;
}
}
}
public class TModules : List<TAbc>
{
private static string DefaultCstFolder = TTemplatesDll.TemplateDir;
public TModules(string pTemplatesDir)
{
/// обрезано
}
public int Remove() // падает с Ехцептионом на вызове этого метода. Сам метод - не выполняется.
{
return base.RemoveAll(x => !x.Exists());
}
}
public class TAbc
{
public bool Exsist() { ... }
}
[/пре]
[пре]
public class TTemplatesDll
{
string templateDir;
private TTemplatesDll()
{
}
private static TTemplatesDll instance;
public static TTemplatesDll Instance
{
get
{
if (instance == null)
{
instance = new TTemplatesDll();
instance.filename = defaultDllName;
}
return instance;
}
}
public static string TemplateDir
{
set
{
Instance.templateDir = value;
new TModules(value);
logger.Debug("TemplatesDir seted as " + value);
}
get
{
if (Instance.templateDir == null || Instance.templateDir == string.Empty)
{
throw new Exception("Pointer to Template's directory not initialized");
}
return Instance.templateDir;
}
}
}
public class TModules : List<TAbc>
{
private static string DefaultCstFolder = TTemplatesDll.TemplateDir;
public TModules(string pTemplatesDir)
{
/// обрезано
}
public int Remove() // падает с Ехцептионом на вызове этого метода. Сам метод - не выполняется.
{
return base.RemoveAll(x => !x.Exists());
}
}
public class TAbc
{
public bool Exsist() { ... }
}
[/пре]
NEW 17.01.13 13:00
это не линк. RemoveAll - метод коллекции, принимающий предикат. в качестве предиката передана лямбда. так что одно уже выяснили на 100%: линк тут не причём. уже хорошо.
теперь давай перейдём к:
кашпировских тут нет :) так что давай чуть подробней: какой исключение? Тип, сообщение, стэктрейс.
в ответ Murr 17.01.13 12:35
В ответ на:
RemoveAll(x => !x.Exists());
RemoveAll(x => !x.Exists());
это не линк. RemoveAll - метод коллекции, принимающий предикат. в качестве предиката передана лямбда. так что одно уже выяснили на 100%: линк тут не причём. уже хорошо.
теперь давай перейдём к:
В ответ на:
// падает с Ехцептионом на вызове этого метода. Сам метод - не выполняется.
// падает с Ехцептионом на вызове этого метода. Сам метод - не выполняется.
кашпировских тут нет :) так что давай чуть подробней: какой исключение? Тип, сообщение, стэктрейс.
NEW 17.01.13 15:30
в ответ Murr 17.01.13 14:47
тебе вопросы задавать - ацкая пытка :) или ты просто издеваешься? :)
тоесть кидается
Еще раз : лямбда-выражение представляет краткий способ создания предикатов и не имеет ничего общего с линк. :)
В ответ на:
В коде только одно исключение. Именно оно и выбрасывается...
В коде только одно исключение. Именно оно и выбрасывается...
тоесть кидается
new Exception("Pointer to Template's directory not initialized");
из геттера. так? ты ответил на 2/3 моего первого вопроса. приведи стэк-трейс, будь добр =)
В ответ на:
Ну а предикат-то как вычисляется?
Ну а предикат-то как вычисляется?
Еще раз : лямбда-выражение представляет краткий способ создания предикатов и не имеет ничего общего с линк. :)
NEW 17.01.13 16:06
в ответ Posmotrim 17.01.13 15:30
приведи стэк-трейс, будь добр =)
------
Чтобы это сделать надо открутить код на три-четыре дня назад. Даже если он и сохранился где-то - это туда-сюда положительного для задачи не даст, а времени займет много... Лучше Я поборюсь с Нулл-поинтером из-за недостатка памяти...
тебе вопросы задавать - ацкая пытка :)
-----
Так скопы-пасть код - он упадет и вопросов не будет...
------
Чтобы это сделать надо открутить код на три-четыре дня назад. Даже если он и сохранился где-то - это туда-сюда положительного для задачи не даст, а времени займет много... Лучше Я поборюсь с Нулл-поинтером из-за недостатка памяти...
тебе вопросы задавать - ацкая пытка :)
-----
Так скопы-пасть код - он упадет и вопросов не будет...
NEW 17.01.13 16:09
так приведи минимальный код, который я смогу скомпилировать.
давай я тебе помогу:
В ответ на:
Так скопы-пасть код - он упадет и вопросов не будет...
Так скопы-пасть код - он упадет и вопросов не будет...
так приведи минимальный код, который я смогу скомпилировать.
давай я тебе помогу:
using System;
using System.Collections.Generic;
namespace ConsoleApplication18
{
public class TTemplatesDll
{
string templateDir;
private TTemplatesDll()
{
}
private static TTemplatesDll instance;
public static TTemplatesDll Instance
{
get
{
if (instance == null)
{
instance = new TTemplatesDll();
instance.templateDir = "uhhaha!!!";
}
return instance;
}
}
public static string TemplateDir
{
set
{
Instance.templateDir = value;
new TModules(value);
System.Diagnostics.Debug.WriteLine("TemplatesDir seted as " + value);
}
get
{
if (Instance.templateDir == null || Instance.templateDir == string.Empty)
{
throw new Exception("Pointer to Template's directory not initialized");
}
return Instance.templateDir;
}
}
}
public class TModules : List<TAbc>
{
private static string DefaultCstFolder = TTemplatesDll.TemplateDir;
public TModules(string pTemplatesDir)
{
/// обрезано
}
public int Remove() // падает с Ехцептионом на вызове этого метода. Сам метод - не выполняется.
{
return base.RemoveAll(x => !x.Exists());
}
}
public class TAbc
{
public bool Exists()
{
return true;
}
}
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine(TTemplatesDll.TemplateDir);
}
}
}
вывод:
uhhaha!!!
Drücken Sie eine beliebige Taste . . .
NEW 17.01.13 19:28
В первый раз встречаю, такое определение
Как то привык ориентироваться на другое.
http://csharpindepth.com/articles/general/singleton.aspx
http://msdn.microsoft.com/en-us/library/ff650316.aspx
Для каких целей, можно уточнить?
А в общем прицип простой - грузим длл-ку и вытаскиваем нужный тип
Assembly SampleAssembly;
SampleAssembly = Assembly.LoadFrom("c:\\Sample.Assembly.dll");
SampleAssembly.GetType("SuperPuperType",true);
Однако веселые часы получишь после :)
Весьма желательно грузить все требуемые Длл-ки в домейн приложения (все выбирается автоматом). Иначе рискуешь получить две копии какой нибудь длл-ки и после долго думать отчего "type1" != "type1"
Ну и в домейне также неплохо подписаться на ошибки загрузки длл-ок и типов.
в ответ Murr 17.01.13 00:51
В ответ на:
Представление Длл, однако, будет именно синглетоном
Представление Длл, однако, будет именно синглетоном
В первый раз встречаю, такое определение

Как то привык ориентироваться на другое.
http://csharpindepth.com/articles/general/singleton.aspx
http://msdn.microsoft.com/en-us/library/ff650316.aspx
В ответ на:
интересует - Как загрузить единичный класс из Длл
интересует - Как загрузить единичный класс из Длл
Для каких целей, можно уточнить?
А в общем прицип простой - грузим длл-ку и вытаскиваем нужный тип
Assembly SampleAssembly;
SampleAssembly = Assembly.LoadFrom("c:\\Sample.Assembly.dll");
SampleAssembly.GetType("SuperPuperType",true);
Однако веселые часы получишь после :)
Весьма желательно грузить все требуемые Длл-ки в домейн приложения (все выбирается автоматом). Иначе рискуешь получить две копии какой нибудь длл-ки и после долго думать отчего "type1" != "type1"

Ну и в домейне также неплохо подписаться на ошибки загрузки длл-ок и типов.
NEW 17.01.13 20:38
в ответ AlexNek 17.01.13 19:28
СамплеАссемблы = Ассемблы.ЛоадФром("ц:\\Сампле.Ассемблы.длл");
------
Это - легко...
Даже класс из нее инстанцировать никакой сложности не представляет... это, кстати, именно тот класс который мне нужен...
Теперь , плс, перекомпилируй те из 650 шаблонов, которые требуют перекомпиляции... информация - аккурат в загруженном классе...
Первый момент - файл не доступен для записи... Хорошо - грузим в массив и инстанцируем и массива... Победили... однако памяти отожрали много...
Можно уменьшить расходы, сохраняя нужный мне класс в отдельной Длл... тоже работает... но получается много Дллок.
Хочется, однако, иметь одну (большую) Длл и не загружать ее несколько раз...
Потому спрашиваю - Как загрузить отдельный класс из Длл, не загружая саму Длл.
Что-то вида - прочитать заголовок, прочитатй кусок байтового аррея представляющий нужный мне класс и инстанцировать только этот класс из аррея...
и после долго думать отчего "тыпе1" != "тыпе1"
------
Похоже, что что-то похожее было...
------
Это - легко...
Даже класс из нее инстанцировать никакой сложности не представляет... это, кстати, именно тот класс который мне нужен...
Теперь , плс, перекомпилируй те из 650 шаблонов, которые требуют перекомпиляции... информация - аккурат в загруженном классе...
Первый момент - файл не доступен для записи... Хорошо - грузим в массив и инстанцируем и массива... Победили... однако памяти отожрали много...
Можно уменьшить расходы, сохраняя нужный мне класс в отдельной Длл... тоже работает... но получается много Дллок.
Хочется, однако, иметь одну (большую) Длл и не загружать ее несколько раз...
Потому спрашиваю - Как загрузить отдельный класс из Длл, не загружая саму Длл.
Что-то вида - прочитать заголовок, прочитатй кусок байтового аррея представляющий нужный мне класс и инстанцировать только этот класс из аррея...
и после долго думать отчего "тыпе1" != "тыпе1"
------
Похоже, что что-то похожее было...
NEW 17.01.13 20:44
в ответ Posmotrim 17.01.13 16:09
Хммм... В немецком Я понимаю меньше чем свинья в апельсинах...
Говоришь - не падает... Ну пусть так... А у меня - упало... где не ожидал...
Отчего и почему - не знаю... и не интересно...
Сделал чтобы работало - и хорошо - там других проблем навалом...
Говоришь - не падает... Ну пусть так... А у меня - упало... где не ожидал...
Отчего и почему - не знаю... и не интересно...
Сделал чтобы работало - и хорошо - там других проблем навалом...
NEW 17.01.13 21:32
в ответ AlexNek 17.01.13 21:10
Пока еще смутно пониманию что тебе нужно.
------
Мне нужно получить из Длл информацию об тех шаблонах, которые она уже содержит.
После получения этой информации мне нужно добавить/удалить/заменить соответственно новые/удаленные/изненные шаблоны и обновленную информацию обратно в Длл..
Полную перекомпиляцию делать нежелательно - занимает слишком долго, а меняются обычно 1-2-3 шаблона за раз...
Ну а потом - загружать и гнать все на выполнение... Выполнялку Я сегодня дочинил... Осталось немного потоптаться на базовом коде шаблона и почистить все изделие... Баги там, конечно, еще есть, но оно уже супортабельное - понятно где ковырять при падении...
------
Мне нужно получить из Длл информацию об тех шаблонах, которые она уже содержит.
После получения этой информации мне нужно добавить/удалить/заменить соответственно новые/удаленные/изненные шаблоны и обновленную информацию обратно в Длл..
Полную перекомпиляцию делать нежелательно - занимает слишком долго, а меняются обычно 1-2-3 шаблона за раз...
Ну а потом - загружать и гнать все на выполнение... Выполнялку Я сегодня дочинил... Осталось немного потоптаться на базовом коде шаблона и почистить все изделие... Баги там, конечно, еще есть, но оно уже супортабельное - понятно где ковырять при падении...
NEW 17.01.13 21:51
в ответ Posmotrim 17.01.13 21:03
это вывод программы на консоль..
-----
Ааа... не обратил внимания на код...
За попутку разобраться - отдельное спасибо...
Сегодня была другая хохмочка...
Система - запускается... и работает... генерация кода - происходит... 100... 200... 400... 600... шаблонов отработали...
А потом - хлюп... и нулл-поинтер... причем шаблоны - те же самые... и выполнялка - та же самая...
Минут 15 не мог понять откуда проблема - все исходники доступны, все компилируется... хоть инкрементно, хоть с нуля...
И все одно - падает...
Потом догадался - версия шаблонов была от предыдущей генерации - изменений в них не было и их не перекомпилировало,
а изменения у меня были аккурат в базовом коде шаблонов...

-----
Ааа... не обратил внимания на код...
За попутку разобраться - отдельное спасибо...
Сегодня была другая хохмочка...
Система - запускается... и работает... генерация кода - происходит... 100... 200... 400... 600... шаблонов отработали...
А потом - хлюп... и нулл-поинтер... причем шаблоны - те же самые... и выполнялка - та же самая...
Минут 15 не мог понять откуда проблема - все исходники доступны, все компилируется... хоть инкрементно, хоть с нуля...
И все одно - падает...

Потом догадался - версия шаблонов была от предыдущей генерации - изменений в них не было и их не перекомпилировало,
а изменения у меня были аккурат в базовом коде шаблонов...


NEW 17.01.13 21:59
в ответ Murr 17.01.13 21:32
Ну вот, после пыток стало немного проясняться. 
долго это сколько на современном компе?
То бишь шаблоны это некие классы, а не спец. язык?
Какой "уровень наследования"? Что мешает сделать по шаблону на Длл-ку - только количество?

В ответ на:
занимает слишком долго
занимает слишком долго
долго это сколько на современном компе?
То бишь шаблоны это некие классы, а не спец. язык?
Какой "уровень наследования"? Что мешает сделать по шаблону на Длл-ку - только количество?
NEW 17.01.13 22:30
в ответ AlexNek 17.01.13 21:59
долго это сколько на современном компе?
-----
Долго - это дольше, чем может вытерпеть мой шеф...
А вытерпеть он может перекомпиляцию именно тех шаблонов, которые были изменены...
По поводу долго... иногда - долго... есть шаблон, содержащий минимизированную версию какой-то JS-либы... кажется 220 килобайт... минут пять идет конвертация в cs-класс...
Так и хочется выкинуть эту каку хотя бы в отдельный поток... но компилятор - однопоточный...
То бишь шаблоны это некие классы, а не спец. язык?
-----
Отдельный язык, компилируемый (своим компиляторм) в стандартные C# классы. Затем классы уже компилятся в модули... и по результатам еще и Длл лепится...
Какой "уровень наследования"?
-----
2-3... может и больше - я до конца еще не разобрался...
Что мешает сделать по шаблону на Длл-ку - только количество?
-----
Там есть неприятная зависимость от последовательности компиляции... Сейчас шаблоны группируются по модулям и система управляет порядком компиляции и выполнения этих групп/модулей... Если поменять порядок - может и не компилироваться... Разбираться с этим на уровне отдельного шаблона - редактировать в ручную файл в 600+ строк... и делать это каждый раз при добавлении нового шаблона... по 8-10 раз в день... и синхорнизация между разработчиками...
-----
Долго - это дольше, чем может вытерпеть мой шеф...

А вытерпеть он может перекомпиляцию именно тех шаблонов, которые были изменены...

По поводу долго... иногда - долго... есть шаблон, содержащий минимизированную версию какой-то JS-либы... кажется 220 килобайт... минут пять идет конвертация в cs-класс...
Так и хочется выкинуть эту каку хотя бы в отдельный поток... но компилятор - однопоточный...

То бишь шаблоны это некие классы, а не спец. язык?
-----
Отдельный язык, компилируемый (своим компиляторм) в стандартные C# классы. Затем классы уже компилятся в модули... и по результатам еще и Длл лепится...
Какой "уровень наследования"?
-----
2-3... может и больше - я до конца еще не разобрался...

Что мешает сделать по шаблону на Длл-ку - только количество?
-----
Там есть неприятная зависимость от последовательности компиляции... Сейчас шаблоны группируются по модулям и система управляет порядком компиляции и выполнения этих групп/модулей... Если поменять порядок - может и не компилироваться... Разбираться с этим на уровне отдельного шаблона - редактировать в ручную файл в 600+ строк... и делать это каждый раз при добавлении нового шаблона... по 8-10 раз в день... и синхорнизация между разработчиками...