пятница, 21 октября 2011 г.

[PowerShell] Ошибка 80040154 при работе с WebAdministration

Мне нравится время от времени писать на PowerShell. В основном это задачи администрирования и развертывания. В этой заметке я хочу рассказать о решении одной интересной проблемы связанной с работой модуля WebAdministration. Итак, суть проблемы: при выполнении любого командлета из этого модуля возникает ошибка:
Cannot retrieve the dynamic parameters for the cmdlet.
Retrieving the COM class factory for component with CLSID {688EEEE5-6A7E-422F-B2E1-6AF00DC944A6} failed due to the following error: 80040154.

четверг, 20 октября 2011 г.

Нерекурсивный обход дерева

Когда я был стажером, мой наставник показал мне, как можно обойтись без рекурсии при обходе дерева. У меня была задача, - получить список департаментов организации «X». В организации есть множество департаментов и подразделений с различным уровнем вложенности. Вместо того чтобы рекурсивно сделать обход дерева, он предложил следующее решение: использовать цикл While и две коллекции. Node – это класс, описывающий структуру организации: название, количество служащих, дочерние подразделения, которые также описываются классами Node и т.д.

четверг, 22 сентября 2011 г.

Удаление неиспользуемых сборок из .NET проекта

Когда-то во время учебы в университете, преподаватель, проверяя лабораторную работу по C++, вдруг неожиданно для меня задал вопрос: “А зачем вам здесь #include “%имя_библиотеки%”? Вы можете пояснить, для каких частей кода нужна каждая директива include?” Та директива, что «бросилась ему в глаза», была добавлена при попытке использовать какой-то класс. Класс, видимо, не прижился в лабораторной и его использование было благополучно удалено, а include остался…

Программируя в С#, с использованием Visual Studio, мы так же сталкиваемся с неиспользуемыми директивами using. Но Visual Studio может помочь справиться с проблемой, достаточно для .cs файла вызвать команду “Remove Unused Usings”. Правда есть еще одно место, которое так же не мешало бы время от времени чистить. Это ссылки (References) проекта. Как ни печально, но для C# проекта такой команды нет. В MS Connect даже баг создали по этому поводу. А вот для VB.NET проектов такая функция есть (найти её можно в свойствах проекта), но по злой иронии судьбы для VB.NET проектов нет команды для удаления неиспользуемых Imports (usings в C#) :)

Подогреваемые жаждой сделать полезное коллегам, независимые разработчики решили написать небольшие расширения для Visual Studio. А тут еще и Extension Manager из Visual Studio 2010 так упростил процесс распространения расширений. Пример таких расширений можно найти здесь и здесь. Невозможно судить об алгоритмах, используемых в этих расширениях. Хотя не буду скрывать, что после того как первое расширение бессовестно удалило из проекта приличную часть реально нужных для компиляции сборок, мы все таки посмотрели его рефлектором… Разбираться со вторым уже не стали. В общем-то, проблема одинакова, а ключевое словосочетание можно найти в пред-предыдущем предложении: нужных для компиляции.

воскресенье, 18 сентября 2011 г.

Упаковка типов значения в CLR. Задачка для собеседования

Когда-то, прочитав книгу Джеффри Рихтера (Jeffrey Richter) CLR via C#, мне понравился пример из параграфа про упаковку и распаковку типа значения. На днях, вновь про него вспомнив, я решил посвятить ему первую запись в блоге.

Итак, пример, посмотрите внимательно на следующий код и подумайте, сколько операций упаковки будет произведено?
public static void Main()
{
int x = 5;
object y = x;
x = 10;

// вывести на консоль "10, 5"
Console.WriteLine(x + ", " + (int)y);
}