Обновить
100.41

.NET *

Хаб со знаниями про .NET

Сначала показывать
Порог рейтинга
Уровень сложности

Рендеринг картинок через WPF на примере Pivot

Время на прочтение2 мин
Охват и читатели2.2K
Pivot не нуждается в представлении. Если вбить это слово в поиск хабра, результатом будут 37 статей, среди которых есть как обзоры, так и туториалы. Поэтому я решил сосредоточить свои усилия лишь на одном аспекте работы с Pivot — на картинках.
Читать дальше →

Знакомство с асинхронными операциями в C# 5

Время на прочтение10 мин
Охват и читатели21K
В прошлый раз мы говорили о том, как можно упростить работу с асинхронными операциями с помощью класса AsyncEnumerator Джеффри Рихтера, а также с помощью библиотеки Reactive Extensions. Однако, как поведал нам недавно Хейлсберг с компанией, счастье таки наступит с выходом новой версии языка C# и нам не понадобится использовать сторонние и не очень велосипеды, при работе с асинхронными операциями.

Идея, которая лежит в основе асинхронных операций в C# 5, очень похожа на ту, которую использовал Джеффри Рихтер в своем классе AsyncEnumerator, только на этот раз помимо нас с вами и старины Рихтера о ней еще узнал и компилятор (что здорово сказывается на вкусовых качествах сего синтаксического сахарка).  Для начала, давайте вернемся к синхронной версии нашего гениального примера, который мы использовали ранее:

Читать дальше →

WPF 4.0 — Отображение текста

Время на прочтение1 мин
Охват и читатели4K
Возможно, для многих этот топик не окажется откровением, но я лично узнал об этом совсем недавно. Однако, многим начинающим разработчикам он может быть полезным.

Как известно, с самого рождения WPF болел проблемами с отображением текста. Особенно это было заметно на не крупных шрифтах (подписи к кнопкам, Labels, ListBoxes итд.) Однако, с выходом версии 4.0 Microsoft серьезно переработали вывод текста и добавили несколько полезных attached properties.

Я не буду останавливаться подробно на рассмотрении всех свойств, а приведу лишь короткий рецепт, как сделать, чтобы ваши контролы в WPF форме отображались с четким текстом. Подчеркну, что он применим к ситуации, когда вы используете стандартные контролы без особых трансформаций, анимаций и огромного текста.

Итак, достаточно добавить следующее свойства в элемент вашего окна:

<Window TextOptions.TextFormattingMode="Display" ...... />


Результат можно приблизительно увидеть здесь (по клику полное изображение):



Приблизительно, потому что скриншот полностью не отображает разницы, на работающем приложении все заметно гораздо лучше.

Для тех, кто хочет подробнее почитать про рендеринг текста в WPF 4.0 есть замечательный блог посвященный исключительно этой теме: WPF Text Blog. Очень советую почитать вот этот пост: blogs.msdn.com/b/text/archive/2009/08/24/wpf-4-0-text-stack-improvements.aspx

UPD: Коллега посоветовал интересный пост тему рендеринга текста: www.codinghorror.com/blog/2007/06/font-rendering-respecting-the-pixel-grid.html

Mono.Cecil: делаем свой «компилятор»

Время на прочтение4 мин
Охват и читатели15K
Одной из самых роскошных тем для программистов, балующихся изобретением велосипедов, является написание собственных языков, интерпретаторов и компиляторов. Действительно, программа, способная создавать или исполнять другие программы, инстинктивно вселяет благоговейный трепет в сердца кодеров — потому что сложно, объемно, но безумно увлекательно.

Большинство начинают с собственных интерпретаторов, которые представляют собой в общем виде огромный свитч команд в цикле. Интересно, вольготно, но муторно и весьма медленно. Хочется чего-то более шустрого, чтобы JIT'ить умело и, желательно, само следило за памятью.

Отличным решением данной проблемы является выбор .NET в качестве целевой платформы. Оставим лексический разбор на следующий раз, а сегодня давайте попробуем сделать простейшую программу, которая создает работающий исполняемый экзешник:



Читать дальше →

Взлом программ для чайников

Время на прочтение5 мин
Охват и читатели519K
Disclaimer: всё ниженаписанное написано исключительно с просветительскими и исследовательскими целями, а также понимания механизмов защиты от взлома. Автор ни в коем случае не рекомендует использовать данную информацию для взлома программ.

В данной статье я хочу рассказать про три с половиной основных способа взлома программ на .NET, цель, которую я преследую — помочь разработчикам лучше понять механизмы защиты своих программ, т.е. выяснить наиболее очевидные угрозы и предпринять соответствующие меры (или не принимать).

Я не буду углубляться в детали и использовать сложные инструменты для взлома. Всё будет расписано «для чайников», т.е. все инструменты будут простыми, легкодоступными и бесплатными. А основным будет Reflector, декомпилятор программ под .NET

В качестве подопытного кролика я выбрал Expresso — анализатор регулярных выражений. Данная программа бесплатная, в лицензии вроде бы ничего не указано про взлом, но при этом без регистрации она будет работать всего 60 дней. Другими словами, вред от взлома данной программы минимальный, к тому же внутреннее её устройство очень уж хорошо подходит для тренировки. Буду надеяться, что автор данной программы не обидится на меня.
Читать дальше →

Code Interface Driven Design

Время на прочтение3 мин
Охват и читатели1.5K
Работая над уменьшением связанности и размышляя о SOA пришел к идее построения типов путем композиции интерфейсов.

В классическом DDD нужно выделить домен – совокупность объектов и их связей. Но когда я применял этот принцип в жизни, встретился с двумя трудностями:

  1. Если есть большой домен и кучка сервисов вокруг него, то становится сложным управление доступом к членам класса. Выглядит это так: есть объект User со свойством CreatedAt, которое я хочу разрешить редактировать только сервису MembershipService. Чтож, пишем InternalsVisibleTo с указанием MembershipService. Дальше нам нужно сделать объект, например Car, у которого есть свойство PassedDistance, которое я хочу открыть только для CarService. Опять повторяем манипуляции с InternalsVisibleTo, но тут появляется проблема: теперь Membersip может изменять километраж автомобиля, а CarService – дату регистрации пользователя.
  2. DDD всё еще не дает возможности строить приложение «по кирпичикам» – просто подключая нужные модули. Говорят, что в Ruby можно, поэтому хочется такой же легкости в .Net =). А не получается всё по той же причине – домен выделен в отдельную сборку, и, подключая сервис, приходится вручную тянуть из домена все зависимые сущности, перебирая их свойства, т.к. большинство из них в новом проекте не понадобятся. Т.е. проблему связанности сервисов DDD решает, а вот связанность домена всё еще не решена.


Выход один
Читать дальше →

Как обмануть NET.Reflector

Время на прочтение3 мин
Охват и читатели15K
Сегодня я задумался о том, как обфускаторы скрывают код методов от утилит деобфускации вроде NET.Reflector. Как ни странно, но я не нашел в интернете никакой полезной информации по этому вопросу (возможно, плохо искал) и поэтому пришлось провести маленькое исследования самостоятельно. Под катом краткая заметка о результатах. В примере кода будет снова использоваться Mono.Cecil и генерация кода, так что не забудьте прочитать мою первую статью.

Читать дальше →

Инъекции MSIL кода в стороннюю сборку при помощи Mono.Cecil. Реализация принципов АОП в NET

Время на прочтение12 мин
Охват и читатели20K

Введение


В данной статье я расскажу про то, как можно добавлять свой код в существующие .NET сборки и о том, как это связано с аспектно-ориентированным программированием. Статья будет сопровождаться работающими примерами, так как я считаю, что код — это лучший способ донести идею.

Многие .NET разработчики знают, что для доступа к объектам чужой сборки можно использовать Reflection. С помощью типов из System.Reflection мы можем получить доступ ко многим объектам .NET сборки, просмотреть их метаданные, и даже использовать те объекты, доступ к которым ограничен (например, private методы чужого класса). Но использование Reflection имеет свои ограничения и главная причина этому — данные, с котороми вы работаете через Reflection, все еще считаются кодом. Таким образом, вы, к примеру, можете получить CodeAccessSecurity exception, если сборка, к которой вы пытаетесь применить Reflection, запрещает это. По этой же причине Reflection работает довольно медленно. Но наиболее важным для данной статьи является то, что стандартный Reflection не позволяет изменять существующие сборки, только генерировать и сохранять новые.

Mono.Cecil


Качественно иной подход предлагает бесплатная библиотека с открытым исходным кодом Mono.Cecil. Главное отличие подхода Mono.Cecil от подхода Reflection в том, что данная библиотка работает с NET сборкой как с потоком байт. При загрузке сборки, Mono.Cecil разбирает PE заголовок, CLR заголовок, MSIL код классов и методов и т.д. работая напрямую с потоком байтов, представляющим сборку. Таким образом, с помощью данной библиотеки можно как угодно (в пределах предусмотренного) изменять имеющуюся сборку.
Читать дальше →

Русские идентификаторы в коде

Время на прочтение4 мин
Охват и читатели13K
Речь пойдет об использовании в программном коде названий (классов, переменных, методов) на родном языке (в моем случае — на русском).

Опыт показал, что русские идентификаторы идеально подходят для создания объектной модели и для обсуждения ее с Заказчиком (для отечественных проектов).

Читать дальше →

Release Version: отладка только начинается…

Время на прочтение3 мин
Охват и читатели3.2K

О чем речь?


Ваша программа наконец заработала, заказчик на тестовом полигоне уверенно тыкает кнопки, все работает штатно… но не спешите радоваться: вас могут подстерегать проблемы после выхода release версии. ПО начинает сыпаться с непонятными багами, заказчик уже готов порвать вас на британский флаг…

Думаете это проблема только Си-шников? Вы ошибаетесь!
Читать дальше →

IEnumerable<T> и IQueryable<T>, в чем разница?

Время на прочтение2 мин
Охват и читатели49K
Уважаемые Хабровчане, решил поделиться одним не очевидным моментом использования LinqToSql, с которым столкнулся некоторое время назад. А именно, про особенности использования каскадных Linq запросов:

Работая над очередным ASP.NET MVC проектом, и проектируя уровень доступа к БД мне потребовалось проверить качество скриптов, генерируемых Framework-ом L2C.

Что имеем (упрощенный вариант модели):


class User {
  public long Id { get; set; }
  public string Name { get; set; }
  public IEnumerable<Parameter> Parameters { get; set; }
}

class Parameter {
  public long UserId { get; set; }
  public string Name { get; set; }
  public string Value { get; set; }
}

Для получения данных написан класс UserRepository:

class UserRepository: MyProjectDataContext {
  public IEnumerable GetUsers() {
    return this.Users.ToModelUsers();
  }
}

static class RepositoryHelper {
  public static IEnumerable<Model.User> ToModelUsers(this IEnumerable<DataAccess.User> users) {
    return users.Select(u => new Model.User { Id = u.Id, Name = u.Name, Parameters = u.Parameters.ToModelParameters() });
  }

  public static IEnumerable<Model.Parameter> ToModelParameters(this IEnumerable<DataAccess.Parameter> parameters) {
    return parameters.Select(u => new Model.Parameter {… });
  }
}

пишем
var users = userRepository.GetUsers().ToList();

смотрим профайлер, и с удивлением обнаруживаем что для загрузки 10 пользователей и их параметров было выполнено целых 11 запросов.
подробности

Microsoft All-In-One Code Framework (C#, C++, VB.NET)

Время на прочтение1 мин
Охват и читатели2.2K
В связи с недавним выходом новой версии этой «библиотеки знаний», и в связи с отсутствием новостной поддержки на Хабрахабре, заполняю этот пробел. Итак если вы:
  • Долго искали примеры реализации той или иной части API Windows и не могли найти
  • Хотите чтобы у вас на жестком диске было обширное количество работающих примеров
  • Если вы программируете на C#, C++ или VB.NET
  • Хотите чтобы для вас написали примеры работающего кода представители Microsoft MSDN Team

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

Быстрая загрузка картинок на хабрэффект

Время на прочтение1 мин
Охват и читатели902
Раз пошла такая пьянка беседа про загрузчики на хабрэффект то я подумал что моя доморощенная программулина тоже может кому то пригодиться.
Есть 2 варианта:
  • cliUploader — загрузить картинки с параметров командной строки. Каждый аргумент – абсолютный или относительный путь (например можно добавить ярлык в контекстное меню Отправить, или просто перетащить одну или несколько картинок на ярлык заливалки)
  • clipboardUploader — загрузить из буфера обмена (например после нажатия PrintScreen или Alt + PrintScreen)
После отработки программы – в буфер обмена будет скопирована ссылка, либо если в первом случае было отправлено несколько изображений – то несколько ссылок, разделенных "\n".

Код естественно тоже выложил, но сразу оговорюсь, что я не гнался за его чистотой и красотой, а просто делал чтоб работало и «для себя».
Скачать плоды моего скромного труда можно там. Бинарники собраны под .NET 2.0, так что есть серьезные основания полагать что в mono тоже заработает, хотя я и не тестировал. Если кто отважится проверить – прошу отписать о результатах.

Ближайшие события

Доступ к ASP.NET Development Server из сети

Время на прочтение2 мин
Охват и читатели7.2K
Здравствуйте. В настоящий момент я занимаюсь разработкой мобильной версией сайта на ASP.NET. До какого-то момента было вполне логично и удобно пользоваться эмуляторами мобильных платформ, однако потом пришло время смотреть как ведет себя сайт на «живых» устройствах.
Хочу поделиться с вами небольшим советом, как можно тестировать и отлаживать (!) сайты на ASP.NET без установки IIS, а пользуясь встроенным в Visual Studio ASP.NET Development Server.
Читать далее

Книга The art of Unit Testing with Examples in .NET

Время на прочтение4 мин
Охват и читатели20K
osherove_coverПервый раз достаточно близко я познакомился с тестированием лет 5-6 назад, как раз начало моей карьеры. Тогда, я помню, мне рассказывали про покрытие кода тестами. Причем никаких Unit тестов меня не просили писать, просто говорили: “вот видишь if с тремя условиями, который ты написал, ты должен проверить все эти три условия”. Подразумевалось, что я, после того как напишу код, должен его проанализировать, и полностью протестировать обычным проходом по интерфейсу приложения. Как вам? Со временем знания в тестировании у меня немного выросли, я немного научился писать тесты. Я до сих пор не видел и не участвовал ни в одном живом проекте, написанным при помощи Test Driven Development (TDD) подхода. Основа моих знаний была в подглядывании того, как делают это коллеги в предыдущей моей конторе, чтении статей (например, у Алесандра Бындю была отличная статья “TDD для начинающих. Ответы на популярные вопросы”), просмотра пару сринкастов. Я решил покончить с безграмотностью и проникнуться темой, для этого я сел за прочтение книги The art of Unit Testing with Examples in .NET. Притом, что в текущей конторе? можно сказать, что тесты пишу только я для своего кода. Нужно быть образцом.
Читать дальше →

.Net коннектор для файлового менеджера elFinder

Время на прочтение3 мин
Охват и читатели2.7K
Есть такой замечательный, как мне кажется, файловый менеджер для веба под названием elFinder, который, также, интегрируется с WYSIWYG редактором elRTE.

Но, к сожалению, пользоваться им я не мог, потому что проекты у меня на ASP.Net / ASP.Net MVC, а т.н. «коннекторы» (то есть, серверная часть) были написаны на PHP и Python. Была идея написать свой, но сроки горели, и я использовал CKFinder. А тут вдруг на этих длинных выходных совершенно не хотелось вылазить из дома… и вот результат — коннектор, который я (и вы) можете использовать в своих дотнет приложениях. Если, конечно, не испугаетесь.)
Читать дальше →

Мифы и заблуждения насчёт CLR и .NET

Время на прочтение8 мин
Охват и читатели36K
Последнее время на популярно-технических форумах я часто встречаю ожесточённые споры приверженцев и противников .NET. Эти споры, как правило, начинаются из-за недоразумения, и заканчиваются жестким троллингом, беседами “за жизнь” и сравнением радиусов и удельных плотностей материала различных сферических коней. Обе стороны силятся доказать и аргументировать, но ни одна не хочет посмотреть на предмет спора другими глазами. Хабрахабр не исключение, увы.

Накалу страстей такой беседы позавидовали бы религиозные фанатики. Единственное, что спасает противников от крестовых походов друг на друга, вооружившись вилами и LangSpec’ами — то, что они разделены интернетом.

Так жить нельзя, господа. Мне захотелось исправить эту ситуацию, и выступить с одной из сторон. Этим постом я попробую нанести сообществу непоправимую пользу и разобраться с мифами, на обсуждение которых, а не на взаимное членовредительство, к сожалению, и уходят силы спорщиков. А так как я в своё время перелез с C++ на C# и всё вокруг него, то я буду развенчивать негативные мифы, прибавлять позитива и всячески приукрашивать действительность — а как без этого. И — заметьте — это обойдется совершенно бесплатно для M$. Ну а сделать я это хочу в формате Q&A.
Едем!

Async в C# и SynchronizationContext

Время на прочтение5 мин
Охват и читатели45K
Продолжение: часть III.

Прошлая заметка о async (часть I) была введением. В этой я продолжу начатую тему: я расскажу о том, что async взаимодействует с SynchronizationContext, и как это влияет на разработку асинхронных графических приложений.

Тестовым полигоном будет пример DiningPhilosophers, который идет вместе с расширением для асинхронного программирования. Это программа — визуализация знаменитой задачи Дейкстры об обедающих философах (ссылка). Прежде, чем читать дальше, лучше ознакомиться с условиями задачи.

image
Читать дальше →

Опубликованы новые материалы по WPF

Время на прочтение2 мин
Охват и читатели3.9K
image

Коллеги,

Мы рады сообщить, что сегодня обновили центр по .Net Framework на MSDN, который теперь содержит много новых материалов о Windows Presentation Foundation на русском языке. Windows Presentation Foundation (WPF) ― это система следующего поколения для построения клиентских приложений Windows с визуально привлекательными возможностями взаимодействия с пользователем. С помощью WPF можно создавать широкий спектр как автономных, так и размещенных в браузере приложений. В основе WPF лежит векторная система визуализации, не зависящая от разрешения и созданная с расчетом на возможности современного графического оборудования. WPF расширяет базовую систему полным набором функций разработки приложений, в том числе Язык XAML (Extensible Application Markup Language), элементами управления, привязкой данных, макетом, двухмерный- и трехмерный-графикой, анимацией, стилями, шаблонами, документами, мультимедиа, текстом и оформлением. WPF входит в состав Microsoft .NET Framework и позволяет создавать приложения, включающие другие элементы библиотеки классов .NET Framework.

Читать дальше →

Async в C#

Время на прочтение4 мин
Охват и читатели96K
Продолжение по ссылкам: часть II и часть III.

На PDC2010 Хейсберг объявил, что следующая версия C# будет поддерживать примитивы для удобной организации асинхронных вычислений, кроме анонса была представлена CTP версия расширения для студии (скачать), которая позволяет попробовать улучшенное асинхронное программирование уже сейчас.

Улучшение создано, чтобы облегчить комбинацию асинхронных операций, а так же для того, чтобы асинхронных код выглядел максимально приближенно к синхронному. Учитывая, что Silverlight версия .NET Framework содержит только асинхронную модель для работы с сетью, данное улучшение очень уместно.

Не смотря на то, что упрошенное асинхронное программирование является нововведением в C#, сам подход нельзя назвать инновационным, так как реализация async на основе монад есть в Haskell, F# и Nemerle. На самом деле поддержка языком монад позволяет реализовать даже большее, поэтому я был немного удивлен, когда посмотрел презентацию Хейсберга и понял, что в язык был встроен только частный случай.
Под катом описание async и await

Вклад авторов