← All posts tagged .net

Есть ли в сишарпе что-нибудь типа версий символов? То есть у меня Foo.dll есть метод Foo.Foo, который возвращает int, а потом мне приспичило возвращать string. Называть его Foo.FooString() как-то глупо. Можно ли сделать так чтобы код собранный со старой Foo.dll по имени Foo.Foo реально попадал бы на старую имплементацию метода, а с новой — на новую. Перегрузка, очевидно, не канает, так как тип возвращается.

можно ли в xaml описать свой класс, с новыми пропертями?

У меня окошко с кучей полей. Я пытаюсь сделать ему DesignTimeData. Все пишут что надо в xaml инстанциировать свою ViewModel, как-то заполнять её данными. Но у нас тут такая модель что в DesignTime её не получается инстанциировать. Пока лучшее что я придумал это сделать фейковую модель и её уже заполнять. Но это как-то криво, по-моему. По хорошему, если у нас утиная типизация и всё работает через рефлекшен, наверное можно сделать как-то так чтобы этот рефлекшен видел список пропертей, которые можно в рантайме менять в зависимости от того как класс ициализирован. Я нагуглил какой-то ICustomTypeDescriptor, но никакой готовой к использованию реализации на нашёл (есть абстрактные классы), всё равно надо что-то своё наследовать,

У меня такая ситуация. Короче, у нас есть некая общая шина, где вызывается метод через Invoke(). Потом этот метод в какой-то момент зовёт нативный код, который и делает всю работу. Если нативный код крешится, по идее это должно превратиться в исключение и улететь в самый верх и привести к падению программы. При этом в дампе должен быть стек до места падения. И есть проблема — Invoke() ловит все исключения и заворачивает их в TargetInvocationException, где внутреннее исключение записано как InnerException. Но нативный стек при этом не сохраняется — он же недоступен в рантайме. В итоге у нас есть стек до места входа в нативный код, который практически бесполезен.

Как это можно было бы пофиксить?

msdn говорит про bindingRedirect "When you build a .NET Framework application against a strong-named assembly, the application uses that version of the assembly at run time by default, even if a new version is available. However, you can configure the application to run against a newer version of the assembly". То есть, если мы уже собираем софт, иметь эти редиректы в app.config не нужно, вместо этого надо исправить сам референс.
я правильно рассуждаю?

есть API или скриптуемый дебуггер для дотнета? Или научите меня пользоваться mdbg, он на простейшем дампе пишет какую-то хуйню про то что активный тред не найден и ничего по факту не грузит.

есть ли вызов для проверки существования файла или директории, без конкретизации что это? Я подозреваю File.Exists() делает дополнительный stat или что там, чтобы убедиться что это файл, и это слишком медленно. Если прочитать раз директорию с EnumerateFiles и потом просто проверять, получается быстрее, но это костыль же.

Я хочу попробовать избавиться от GAC для разработки. Есть ли готовые программки/библиотеки/whatever, которые прописывают dll в exe.config файлы? И длл, и екзешек в проекте много, хотелось бы автоматизировать.