Как стать автором
Поиск
Написать публикацию
Обновить
115.87

.NET *

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

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

Полуавтоматическая конвертация лени в код

Время на прочтение7 мин
Количество просмотров6.6K
Всем доброго дня. Сегодня я хочу поговорить об автоматической генерации кода C#. Например, свойства в классах, описывающих сущности предметной области, обычно описываются по совершенно одинаковой схеме. И мне элементарно лениво писать для каждого примитивного свойства одинаковые конструкции. Немного спасает применение сниппетов и активных шаблонов, но когда приходит нужда что-то поменять в этой схеме, то приходится перелопачивать кучу кода. Так почему бы это однообразие не генерировать автоматически в процессе сборки?
В какой-то момент кинетическая энергия творчества ненадолго пересилила потенциальную энергию лени, и результатом этого стала маленькая библиотечка для автоматической генерации некоторых исходных файлов программы на основе внешних данных. Приглашаю под кат всех ленивых (в хорошем смысле этого слова) разработчиков на C#.
Читать дальше →

Менеджмент памяти в .Net Framework от Redgate

Время на прочтение1 мин
Количество просмотров6.2K

Недавно с рассылкой от компании Redgate (это та компания, которая выпустила всем известные тулы .Net Reflector, SmartAssembly и прочие) получил бесплатную книгу «Under the Hood of .NET Memory Management». Пока что доступна только первая ее часть, но она довольно объемная и раскрывает многие аспекты менеджмента памяти. Самое вкусное обещают во второй части. Приятного скачивания (краткое содержание под катом):



Бонусом по первой ссылке, в том же архиве, идет книга по ANTS Memory Profiler

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

.Net, UTF-16 и регулярные выражения

Время на прочтение3 мин
Количество просмотров2.4K
Как-то мне понадобилось проверить, является ли XML-имя правильным. Что может быть проще? Смотрим стандарт, где четко описано, какими символами может имя начинатся, а какими — продолжаться, все просто и понятно:

[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
[5] Name ::= NameStartChar (NameChar)*


Практически готовое регулярное выражение, легкая обработка напильником Ctrl+H…

    public const string NameStartCharPattern = @"\:|[A-Z]|_|[a-z]|[\u00C0-\u00D6]|[\u00D8-\u00F6]|[\u00F8-\u02FF]|[\u0370-\u037D]|[\u037F-\u1FFF]|[\u200C-\u200D]|[\u2070-\u218F]|[\u2C00-\u2FEF]|[\u3001-\uD7FF]|[\uF900-\uFDCF]|[\uFDF0-\uFFFD]|[\u10000-\uEFFFF]";
    public const string NameCharPattern = NameStartCharPattern + @"|-|\.|[0-9]|\u00B7|[\u0300-\u036F]|[\u203F-\u2040]";
    public const string NamePattern = @"(?:" + NameStartCharPattern + @")(?:" + NameCharPattern + @")*";

* This source code was highlighted with Source Code Highlighter.


Пишем тест…
Assert.That(Regex.Match("4a", Patterns.NamePattern), Is.False);
* This source code was highlighted with Source Code Highlighter.

Чисто, просто, понятно… Упал!
Как, почему?

Сравнение производительности IoC-контейнеров под Windows Phone

Время на прочтение3 мин
Количество просмотров3.6K
Доброго времени, уважаемые хабражители!

Для смартфона оптимальность архитектуры приложений особенно важна, поэтому я решил провести сравнение по производительности бесплатных и открытых библиотек контейнеров, доступных для Windows Phone.
Удостоились внимания следующие библиотеки (самые последние версии на момент тестирования):
Читать дальше →

Архитектура логирования

Время на прочтение10 мин
Количество просмотров122K
Мой опыт разработки в основном строится вокруг разнообразных сетевых cервисов под Windows и Linux. Я обычно стремлюсь добиться максимальной кроссплатформенности вплоть до бинарной совместимости. И конечно, накопилось некоторое количество стабильных решений связанных с логированием.

Топик написан как продолжение к этой статье и будет полезен в первую очередь начинающим программистам.

Здесь я собираюсь осветить следующие вопросы:
  • Внутреннее свойство логгера и примеры софта который его использует.
  • Объемы, уровни и детализация сообщений лога.
  • Общие правила конфигурации в разработке, в бою и в расследовании.

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

Работа с EXIF геотегами в C#

Время на прочтение5 мин
Количество просмотров19K
После того как я закончил программу для геотегинга, появилась мысль написать данную статью – дабы поменьше людей наступало на те же грабли, так как толковой информации по данным вопросам не так уж и много.
Итак, я не собираюсь рассказывать, что такое геотегинг или EXIF, об этом можно и в Википедии почитать. А вот как сделать программку на C#, которая бы считывала и записывала данные в EXIF я и собираюсь рассказать.
Читать дальше →

Twitter бот на C#

Время на прочтение3 мин
Количество просмотров8.3K


Здравствуйте, уважаемые пользователи Хабрахабра.
В этой статье я хочу рассказать вам об очень простом и полезном боте для Twitter, который поможет контролировать состояние Windows-сервера (Занятое место на дисках, процент загрузки CPU, RAM).

Предисловие


Я работаю системным администратором на одном консервном заводе. Так как фирма не профильная, приходится быть администратором и программистом в одном лице.
Причина создания этого бота — быстро заканчивающееся место на жестком диске сервера из-за ежедневных резервных копий баз 1С.
Я долго размышлял о возможных вариантах подобного контроля и пришёл к выводу, что Твиттер самое удобное решение для этого. Итак, от слова к делу.
Читать дальше →

Удобная отладка Windows служб

Время на прочтение2 мин
Количество просмотров16K
Отладка Windows Service приложений не такая тривиальная задача как кажется. Проблема в том, что при отладке этого типа приложений нельзя воспользоваться стандартными средствами Visual Studio такими как точки останова (breakpoints) и прочими полезными инструментами. Всё из-за того, что Windows Service приложение не может быть зыпущено по F5 прямо из Visual Studio. Всё же, MSDN предлагает нам несколько способов для их отладки. Скорее всего многие разработчики даже и не сталкивались с ними до тех пор, пока не стали создавать свою первую службу. Это использование записей в журнал событий и подключение к процессу. Оба этих метода хорошо описаны в MSDN, но они позволяют произовдить отладку только уже запущенной службы. Из-за этого код, который производит сам запуск службы, в методе OnStart(), нельзя протестировать.

Ниже я хочу рассказать о способе которым можно обойти это ограничение, и тестировать свой сервис как обычное консольное приложение. И, следовательно, воспользоваться всем тем, что предлагает нам для этого Visual Studio.
Читать дальше →

.NET Частичка правды о размещении объектов на Run-time

Время на прочтение5 мин
Количество просмотров6.9K
Как известно, в .NET память делится на две категории: стек (Stack) и управляемая куча (managed heap, далее просто куча). На стеке располагается ссылка(ObjectRef) на объект (ObjectInstance), который, в свою очередь, располагается в куче.

В данной статье речь пойдет о расположении объекта в куче.

Предполагается, что у читателя имеются знания о:
1. stack
2. managed heap
3. GC
4. Слабые ссылки (weak references)
Читать дальше →

Пример использование DSL (Domain Specific Languages) в реальном проекте

Время на прочтение3 мин
Количество просмотров22K
DSL (Domain Specific Languages) — языки, специфичные для решения задач какой-либо предметной области (в противовес языкам общего назначения типа Java или C#). Более подробное описание и примеры есть на википедии, я же хочу написать про то, как довольно легко встроить в приложение (C#) свой собственный DSL на базе языка Boo.
Читать дальше →

Небольшое тестирование двух библиотек для работы с ZIP архивами (язык C#)

Время на прочтение5 мин
Количество просмотров30K
Архивирование

Не раз приходилось работать с zip архивами с помощью C#, в моих случаях — это было скачивание архива с базой, потом извлекал базу на диск, если это был не текстовый файл, то динамически подключал базу данных, иначе просто считывал необходимые мне данные. Для этих целей я использовал ZipStorer, он мне нравиться тем, что очень просто делает возложенную на него работу, мало весит и является классом, который с минимальным количеством телодвижений оказывается в исполняемом файле. Сегодня я решил попробовать что-то другое, для чего выбрал две библиотеки SharpZipLib и DotNetZip, после чего провел небольшое тестирование, чтобы понять какая из них может мне быть полезной в будущем.
Читать дальше →

Выпущена финальная версия среды разработки с открытым исходным кодом SharpDevelop 4.0

Время на прочтение1 мин
Количество просмотров5.9K
imageЗавершена разработка четвертой версии открытой и бесплатной среды разработки SharpDevelop. Эта среда предлагается как среда разработки для языков на базе .NET: C#, VB.NET, Boo, IronPython, IronRuby, F#.

SharpDevelop содержит дизайнеры форм для проектов Windows Forms, WPF и моделей баз данных Entity Framework. Кроме того, в наличии все необходимые инструменты разработки: завершение кода, рефакторинг, отладка, анализ кода, unit testing ( c code coverage), профилирование кода. С помощью расширения можно добавить поддержку StyleCop.

SharpDevelop содержит встроенную поддержку систем контроля версий SVN и Git. Поддерживается мультитаргетинг для разных версий .NET. Среда поддерживает сборку проектов с распараллеливанием, если в системе есть многоядерный процессор.

Остальные возможности SharpDevelop 4.0 можно узнать по следующей ссылке на официальном сайте.

В четвертой версии SharpDevelop были добавлены следующие возможности:
  • WPF Designer
  • Entity Framework (EF) Designer
  • C# 4.0 support
  • VB.NET 10 support
  • New productivity features
  • Alt+Ins has been reimplemented
  • Code completion in IronPython
  • Unit testing with IronPython
  • Unit testing with IronRuby
  • Custom unit test runners
  • New Git source control addin
  • SharpDevelop supports the new Help Viewer
  • Grouping support in SharpDevelop Reports
Загрузить SharpDevelop 4.0 можно по следующей ссылке. Новая версия среды разработки требует предустановленный .NET Framework 4.0. Исходные коды проекта доступны по этой ссылке.

Microsoft Moles

Время на прочтение12 мин
Количество просмотров2.5K
Moles – это легковесный тул от MS Research, который умеет автоматически генерировать заглушки для интерфейсов и виртуальных методов, а также для sealed классов, невиртуальных и статических методов (!), путем генерации кода, которому позднее можно будет подсунуть нужный делегат, вызываемый вместо определенного метода. Первый тип заглушек называется стабы (stubs), а второй – молы (moles). Именно эту штуку я использовал для тестирования асинхронных операций, о которых я рассказывал ранее, но давайте обо всем по порядку.

Stubs



Давайте рассмотрим такой пример. Предположим, что мы понимаем ценность модульных тестов, а также таких принципов, как Dependency Inversion, и других безумно полезных принципов и паттернов (может быть всех остальных принципов S.O.L.I.D., а возможно даже и F.I.R.S.T.). И дело даже не в том, что мы фанаты тестов или дядюшки Боба, а просто потому, что мы знаем, что высокая связность – это плохо. Поэтому мы стараемся в разумных пределах уменьшить зависимости путем выделения интерфейсов с последующим «инжектом» их в конструкторы классов или в методы, которым эти интерфейсы необходимы для выполнения своих задач.

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

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

Распараллеливание задач. Случай «идеальной параллельности». Часть 2

Время на прочтение13 мин
Количество просмотров18K

Предлагаемые решения в .NET 4


Это вторая часть статьи, посвященной распараллеливанию идеальных циклов. В первой части были рассмотрены проблемы, возникающие при этом, и общие подходы к их решению. В этой мы поговорим о конкретных библиотечных компонентах, предоставляемых .NET 4.0 для поддержки этих задач.

Для распараллеливания «идеальных» циклов предоставляются следующие варианты:
  • класс System.Threading.Tasks.Parallel с методами For (), ForEach ()
  • Parallel LINQ с методом расширения AsParallel ().


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

ReSharper: Анализ на NullReferenceException и контракты для него

Время на прочтение7 мин
Количество просмотров5.1K

Если вы используете ReSharper, то вы, наверняка, знакомы с его подсветкой "Possible 'NullReferenceException'". В этой статье я кратко расскажу об анализаторе, который выводит предупреждения такого рода, и о том, как ему помочь делать это лучше.


Сразу рассмотрим пример:


`public string Bar(bool condition)
{
  string iAmNullSometimes = condition? «Not null value»: null;
  return iAmNullSometimes.ToUpper();
}

* This source code was highlighted with Source Code Highlighter.`

ReSharper справедливо подсветит iAmNullSometimes во второй строке метода с таким предупреждением. Теперь выделим метод:


`public string Bar(bool condition)
{
  string iAmNullSometimes = GetNullWhenFalse(condition);
  return iAmNullSometimes.ToUpper();
}

public string GetNullWhenFalse(bool condition)
{
  return condition? «Not null value»: null;
}

* This source code was highlighted with Source Code Highlighter.`

После этой операции предупреждение пропадает. Почему так происходит?

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

Microsoft WebMatrix — Reloaded

Время на прочтение5 мин
Количество просмотров35K
Все новое — это хорошо забытое старое. Видимо, руководствуясь этим принципом, спустя 7 лет Microsoft решила вернуть к жизни одну из своих старых идей — но в новом облачении. Речь идет о WebMatrix — платформе для web-разработки, бета которой стала доступна недавно. Бета включает в себя много всего вкусного — обещанный IIS Express, SQL Server CE 4 и движок представлений для MVC — Razor. А так же — галерею приложений (интегрировано с WebPI), инструменты мониторинга и анализа сайта, средства публикации. Но хватит вступлений, давайте посмотрим что же есть собственно внутри WebMatrix.
Читать дальше →

Как применять IDisposable и финализаторы: 3 простых правила

Время на прочтение7 мин
Количество просмотров64K

От переводчика


После рассказа об утечке памяти и правильной реализации событий размещаю еще один перевод понравившейся мне статьи на тему управления памятью. Я видел несколько разных реализаций Dispose паттерна, иногда они даже противоречили друг другу. В этой статье автор представил хорошее и четкое разъяснение, когда следует реализовывать интерфейс IDisposable, когда финализаторы, а когда — все вместе.
И когда же?

Доступны материалы для обучения VS 2010 и .NET 4.0

Время на прочтение1 мин
Количество просмотров973
image

Выпущен Visual Studio 2010 and .NET Framework 4 Training Kit — October Preview, который представляет собой набор обучающих материалов для закрепления знаний о новых технологиях, которые появились в .NET 4.0. В том числе материалы по следующим новым или обновленным технологиям:

* C# 4.0
* Visual Basic 10
* F#
* Parallel Extensions
* Windows Communication Foundation (WCF)
* Windows Workflow
* Windows Presentation Foundation (WPF)
* ASP.NET 4
* Windows 7
* Entity Framework
* ADO.NET Data Services
* Managed Extensibility Framework (MEF)
* Visual Studio Team System

В комплекте презентации, исходные коды, видеоматериалы и документация. Скачивать отсюда (93.3 MB).

PS: более подробное описание содержания доступно здесь (англ.)

(Зло)употребление C# 4.0 Dynamic – Бестиповое Лямбда-Исчисление, Нумералы Чёрча, и все-все-все… (ч.1)

Время на прочтение8 мин
Количество просмотров5.4K

Введение


Воскресное утро, время для еще одного эпизода в серии Безумные Воскресения. Еще раз в одной категории с риском разрыва мозгов, но ведь это как раз то, что нам нравится, не так ли? На этот раз мы рассмотрим бестиповое лямбда-исчисление в C#. Но погодите, разве C# не типизированный язык? Действительно. Но значит ли это, что все, что вы делаете на C# должно быть статически типизировано? Не обязательно: типизация присутствует в языке как инструмент, который вы можете либо не трогать, либо применить. В этом топике мы рассмотрим как новое ключевое слово dynamic из C# 4.0 под несколько странным углом…
Читать дальше →

Sandcastle Help File Builder – генерируем документацию для .Net

Время на прочтение6 мин
Количество просмотров9.4K
Sandcastle Help File Builder Logo
Sandcastle Help File Builder – это графическая оболочка над генератором документации Sandcastle. В свою очередь, Sandcastle – это гибкий и многофункциональный генератор документации для .Net с использованием XML комментариев из исходного кода. Воспользуемся этим и в несколько шагов создадим документацию нашего проекта.

Основные возможности Sandcastle

  • Включение в документацию XML комментариев из исходного кода.
  • Автоматическое получение информации об элементах .Net, таких как классы, методы, свойства, перечисления с помощью reflection.
  • Возможность интегрировать свои дополнительные HTML страницы в документацию.
  • Генерация документации в нескольких форматах: Microsoft Compiled HTML Help (CHM), MS Microsoft Help 2 (MSDN), веб-сайт — статический и динамический с поиском (ASP.NET).
Sandcastle активно использует в своей работе XML и преобразования с помощью XSLT. Все реализовано очень гибко, легко настраиваемо и доступно в виде исходных кодов.
Читать дальше →

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