.NET → Реализация Code Action с помощью Roslyn
Roslyn Services API позволяют легко реализовывать расширения, которые находят и устраняют проблемы в коде прямо в Visual Studio. Roslyn Services API доступно как часть Roslyn CTP.
В этом посте мы реализуем расширение для Visual Studio, которое детектирует вызовы метода Count() у Enumerable, после чего результат проверяется на равенство больше нуля, например, someSequence.Count() > 0. Проблема, заключающаяся в коде, в том, что Count() должен пройтись по всей последовательности, прежде чем вернуть результат. Более правильным подходом в данном случае является вызов метода Enumerable.Any().
Чтобы исправить это, мы реализуем CodeIssueProvider, детектирующий проблему, и CodeAction, который заменяет условие на вызов Enumerable.Any(), как и требуется. Т.е. наш CodeAction изменит что-то типа someSequence.Count() > 0 на someSequence.Any().
В этом посте мы реализуем расширение для Visual Studio, которое детектирует вызовы метода Count() у Enumerable, после чего результат проверяется на равенство больше нуля, например, someSequence.Count() > 0. Проблема, заключающаяся в коде, в том, что Count() должен пройтись по всей последовательности, прежде чем вернуть результат. Более правильным подходом в данном случае является вызов метода Enumerable.Any().
Чтобы исправить это, мы реализуем CodeIssueProvider, детектирующий проблему, и CodeAction, который заменяет условие на вызов Enumerable.Any(), как и требуется. Т.е. наш CodeAction изменит что-то типа someSequence.Count() > 0 на someSequence.Any().
.NET → Быстрое создание и чтение документов MS Office 2007/2010 из 1С: Предприятие 8
Метод позволяет быстро создавать и читать документы Word, Excel и PowerPoint напрямую
из 1С: Предприятие 8 без установленного Microsoft Office 2007/2010. Скорость создания
документов в несколько раз выше, чем традиционное создание через COM/OLE. Статья
продолжает серию примеров применения на практике 1С.Net: Предприятие. В статье используется разработка Open XML SDK. Для работы
примера необходимы установленные .Net framework 4.0 и Elisy .Net Bridge 4.0.3 и
выше. Пример, сопровождаемый статью, написан для 1С: Предприятие 8.2.13.
Формат Office Open XML (Open Xml) – это формат XML-файлов, помещенных в zip-архив
для представления текстовых документов и документов электронных таблиц, диаграмм,
презентаций. Компания Microsoft выступила одним из спонсоров сертификации этого
стандарта в 2005 году. Результирующий стандарт ISO/IEC 29500:2008 в четырех частях
был опубликован в ноябре 2008 года.
из 1С: Предприятие 8 без установленного Microsoft Office 2007/2010. Скорость создания
документов в несколько раз выше, чем традиционное создание через COM/OLE. Статья
продолжает серию примеров применения на практике 1С.Net: Предприятие. В статье используется разработка Open XML SDK. Для работы
примера необходимы установленные .Net framework 4.0 и Elisy .Net Bridge 4.0.3 и
выше. Пример, сопровождаемый статью, написан для 1С: Предприятие 8.2.13.
Стандарт Office Open Xml
Формат Office Open XML (Open Xml) – это формат XML-файлов, помещенных в zip-архив
для представления текстовых документов и документов электронных таблиц, диаграмм,
презентаций. Компания Microsoft выступила одним из спонсоров сертификации этого
стандарта в 2005 году. Результирующий стандарт ISO/IEC 29500:2008 в четырех частях
был опубликован в ноябре 2008 года.
.NET → Сравнение объектов в C#.NET из песочницы
C#.NET предлагает множество способов сравнить объекты, как экземпляры классов, так и структур. Способов так много, что без упорядочения этих способов и понимания их грамотного использования и имплементации (при наличии возможности переопределения), в голове, неминуемо, образуется каша.
ASP.NET MVC → Обработка всех исключений в контроллерах с помощью атрибута
Всё мы знаем, что в ASP.NET MVC есть такой атрибут
Но нигде, в том же MSDN не сказано (ткните меня носом дайте ссылку где это написано, если я просмотрел), что он обрабатывает только исключения, устанавливающие код ответа сервера в 500.
Посмотрев на исходный код
Не знаю, как вам, а мне удобнее при возникновении исключения, чтобы пользователи видели специальную страницу для этого, а не «жёлтую страницу смерти» или вообще как браузер отображает стандартную для него страницу с кодом ответа сервера (зависит от настроек в Web.config, но об этом позже).
HandleErrorAttribute, который как сказано в MSDN Представляет атрибут, используемый для обработки исключения, вызываемого методом действия.
Но нигде, в том же MSDN не сказано (
Посмотрев на исходный код
HandleErrorAttribute легко убедиться в этом. Там имеются следующие строки:// If this is not an HTTP 500 (for example, if somebody throws an HTTP 404 from an action method),
// ignore it.
if (new HttpException(null, exception).GetHttpCode() != 500) {
return;
}
Не знаю, как вам, а мне удобнее при возникновении исключения, чтобы пользователи видели специальную страницу для этого, а не «жёлтую страницу смерти» или вообще как браузер отображает стандартную для него страницу с кодом ответа сервера (зависит от настроек в Web.config, но об этом позже).
.NET → Cериализация статических объектов в C# из песочницы
Контекст
С данным вопросом встретился при работе над одним из проектов, в котором очень много настроек. В виду того что добавление новых настроек происходило по ходу разработки то выявилась необходимость сделать класс к которому можно обратится из любого модуля программы. Для этого конечно был использован статический класс, а назвали мы его AppSettings. Конечно можно было бы использовать Properties.Settings… Не буду вдаваться в детали, но этот вариант не подходил.
Суть проблемы
Из за того что класс является статическим обычная сериализация не работает. Давайте проверим. Допустим, у нас есть простой статический класс:
В общем если класс не был бы статическим, можно было бы использовать System.Xml.Serialization.XmlSerializer. Это не наш случай — класс у нас статический и в этом случае, по тому, что XmlSerializer.Serialize метод требует экземпляр класса, а не тип класса, то компилятор выдаст 'Test1.TestStatic' is a 'type' but is used like a 'variable'.
С данным вопросом встретился при работе над одним из проектов, в котором очень много настроек. В виду того что добавление новых настроек происходило по ходу разработки то выявилась необходимость сделать класс к которому можно обратится из любого модуля программы. Для этого конечно был использован статический класс, а назвали мы его AppSettings. Конечно можно было бы использовать Properties.Settings… Не буду вдаваться в детали, но этот вариант не подходил.
Суть проблемы
Из за того что класс является статическим обычная сериализация не работает. Давайте проверим. Допустим, у нас есть простой статический класс:
public static class TestStatic
{
// Fields...
private static int _Counter;
public static int Counter
{
get { return _Counter; }
set
{
_Counter = value;
}
}
}
В общем если класс не был бы статическим, можно было бы использовать System.Xml.Serialization.XmlSerializer. Это не наш случай — класс у нас статический и в этом случае, по тому, что XmlSerializer.Serialize метод требует экземпляр класса, а не тип класса, то компилятор выдаст 'Test1.TestStatic' is a 'type' but is used like a 'variable'.
Блог компании Нанософт → САПёР на полях САПР
Мы уже писали о том, что приложение, написанное для nanoCAD, можно запустить в AutoCAD. Но гораздо интереснее наоборот: использовать в nanoCAD код, который был разработан для AutoCAD. Как всегда, я решил делать это играючи.
Оказывается, мысль о том, что можно сделать игру под САПР, приходит не нам одним. Например, в блоге Кина Волмсли (Kean Walmsley), ведущего евангелиста AutoCAD .NET API, есть статья об игре «Сапер». Вот именно этого сапера мы и будем пускать под nanoCAD. Подробности смотрите под катом.

Оказывается, мысль о том, что можно сделать игру под САПР, приходит не нам одним. Например, в блоге Кина Волмсли (Kean Walmsley), ведущего евангелиста AutoCAD .NET API, есть статья об игре «Сапер». Вот именно этого сапера мы и будем пускать под nanoCAD. Подробности смотрите под катом.

.NET → Делаем библиотеку написанную на .Net понятной для Unmanaged кода из песочницы
Пол года проработав в компании, которая занимается программированием на MQL под Meta Trader столкнулся с таким заказом: клиенту нужно что бы программа была написана на C# или VB.Net.
Задача была в том, что бы написать программу на C# и dll на том же языке, которая связывает приложение с торговым советником на MQL. С одной стороны мне это на руку, так как C# изучаю больше года, с другой — стало непонятно, а как же это делается и вообще возможно ли это?

Задача была в том, что бы написать программу на C# и dll на том же языке, которая связывает приложение с торговым советником на MQL. С одной стороны мне это на руку, так как C# изучаю больше года, с другой — стало непонятно, а как же это делается и вообще возможно ли это?

Компиляторы → Разрабатываем компилятор для учебного языка Cool на языке C# под .NET (Часть 2 + Бонусы)
Привет, Хабрахабр!
В данной статье, я, как и обещал, продолжу описание разработки компилятора для языка Cool, начатое в этой статье.
Напомню, что процесс компиляциипо фен-шую включает в себя несколько этапов, которые изображены на рисунке ниже слева. Мой же компилятор содержит только три этапа, которые изображены на этом же рисунке справа.
Введение
В данной статье, я, как и обещал, продолжу описание разработки компилятора для языка Cool, начатое в этой статье.
Напомню, что процесс компиляции
Я пиарюсь → Музыкальный плеер Meridian. Прогресс за месяц
Приветствую вас, дамы и господа!
Весь месяц музыкальный плеер ВКонтакте «Meridian» рос и активно развивался. Были достигнуту хорошие результаты, которыми мы и хотим сейчас с вами поделиться.

Весь месяц музыкальный плеер ВКонтакте «Meridian» рос и активно развивался. Были достигнуту хорошие результаты, которыми мы и хотим сейчас с вами поделиться.

.NET → Размеры CLR-объектов. Точное определение
Думаю, многим разработчикам на управляемом коде всегда интересовало: сколько же байт занимает экземпляр объекта? А каков лимит размера одного объекта в CLR? Существуют ли различия в выделении памяти между 32-битными и 64-битными системами? Если данные вопросы для Вас не пустой звук, тогда прошу под кат.