Сообщения

Сообщения за 2011

TortoiseSVN сделал это! Теперь папка ".svn" будет только одна и в корне проекта

Изображение
Случилось! Трюки с папками ".svn" закончились. Пару месяцев назад TortoiseSVN стал работать с одной папкой ".svn" в корне проекта. Вложенные папки больше не нужны. Для начала работы с новой версией (в новом режиме) сначала надо конвертировать старые папки (проекты) из контекстного меню Windows. На сервер SVN это, понятно, никак не влияет. Для VisualSVN тоже вышел релиз, который такой режим работы с SVN поддерживает.

Реализации IEndpointBehavior бесполезны без открытого конструктора

Любая реализация интерфейса IEndpointBehavior без открытого конструктора по умолчанию (без параметров) бесполезна и не работает, хотя и исключений не кидает в WCF тоже. Т.е. можно столкнуться с тем, что решение настроено, но не работает.

Конструктор класса OracleCommand небезопасен и может выкидывать исключения

Изображение
Конструктор класса OracleCommand небезопасен и может выкидывать исключения при рассогласовании версий DLL от ODP.NET и Oracle Client, или при рассогласовании разрядности (x32 vs x64) и путей. Это означает, что использовать его вне Data Access Layer нельзя. Также любое создание объекта new OracleCommand  должно быть обработано в блоке try catch .

ASP.NET: причуда - точка останова в Global.asax срабатывает два раза.

Изображение
Точка останова в дебаггинге срабатывает два раза на Application_Error в файле  global . asax , если в файле  MyClass , который определен в  <% @   Application    Inherits =" MyClass "   Language ="C#"   %>  в коде тоже определен метод Application_Error. При чем в этом файле точка останова не срабатывает. Мало того, код в этом втором  Application_Error  игнорируется. А вот если из  Global . asax   убрать  Application_Error, то другой метод заработает и точки останова будут устанавливаться. Проверялость на  ASP.NET  Development Server. С другими методами ожидаю такое же поведение. Всегда есть место багам, даже в старом добром  ASP . NET .

Silverlight 4: Ошибки, которые должны свести вас с ума

Изображение
Очередные чудные ошибки Silverlight, которые отображаются вместо нормальных сообщений. Раз поисковик вас сюда привел, то общее решение вашей проблемы звучит так: Ищите случайно поставленную точку в заголовке и теле XAML в следующих местах, например: (Ошибки я выделил красным и жирным) В заголовке: xmlns:Some . OtherName="clr-namespace:BlaBla" xmlns:Some . ="clr-namespace:BlaBla" В теле элемента: <Some . OtherName:MyClass x:Key="MyClass"/> Подробное описание: Обратите внимание, что при этом Designe View в Visual Studio будет отображать страницу правильно, и не ругаться на ошибки. Далее каждый кейс и его ошибка. 1. Кейс xmlns:Some . OtherName="clr-namespace:SomeNamespace; assembly=SomeAssembly" Ошибка The property 'OtherName' does not exist on the type 'UserControl' in the XML namespace ''. 2. Кейс <Some . OtherName:MyClass x:Key="MyClass"/> Ошибка  Error Length cannot b

Blogger и Blogpost блокируются в организациях

Изображение
Пришлось перенести блог из http:// it3xlru.blogspot.com на   http://blog.it3xl.ru/  . У меня на работе Blogger и Blobpost ресурсы, на которые доступ закрыт. Поэтому меняю адрес блога с доменов Google на свой домен.

Отличное решение проблемы "first convert it to a node-set" без использования msxsl:node-set()

Для случая "To use a result tree fragment in a path expression, first convert it to a node-set using the msxsl:node-set() function." представлено отличное решение проблемы без использования  msxsl:node-set() . "get xpath from xsl variable" <xsl:stylesheet version = "1.0"   xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" >   <xsl:output method = "text" />       <xsl:variable name = "myVar" >         <RefData RefTag = "test1" bbb = "false" />         <RefData RefTag = "test2" bbb = "false" />         <RefData RefTag = "test3" bbb = "false" />         <RefData RefTag = "test4" bbb = "true"   />         <RefData RefTag = "test5" bbb = "false" />         <RefData RefTag = "test6" bbb = "false" />     </xsl:variable>       &

Аналог оператора ?? в XPath

Как вариант для дальнейшего развития: Запись в XPath ( someNode[@key = $key] | otherNode[@key = $key] ) [1] Запись в C# int y = xNullable ?? -1;

Управление разбивкой и переносами блоков в XSL

Речь идет о XSL, ранее XSL-FO или просто FO. Сценарии: Запретить перенос блока Заставить блок переноситься обязательно и т.д. Напоминалочка. Чтоб управлять такими вещами нужно изучить атрибуты "keep-..." и "break-...". См.  Keeps and Breaks Properties

Коллизия нотации "(function)();" в JavaScript или почему JavaScript разработчик будет ставить точку с запятой перед (function)();

Нотацию (function)(); в JavaScript всегда надо начинать с точки с запятой. Это защитит от трудно определимой ошибки в интерпретации кода JavaScript-движком. Нотация ( function )(); в JavaScript чаще всего применяется в следующих случаях: когда вы хотите ограничить видимость локальных переменный и поиграть с замыканиями (closures), при этом вызывая немедленное выполнение. когда в проекте используется несколько JavaScript фреймворков и они бодаются за переменную по имени $. Эта нотация помогает гарантированно использовать переменную $, независимо от будущих изменений на сайте. Пример: ;( function ($) { /* do something*/ } )( jQuery ); Ниже код, объясняющий почему нужно использовать точку с запятой вначале. function f1(inp) { alert("f1 - " + inp); } // Ошибки не будет, все в порядке. var f2 = function (inp) { alert("f2 - " + inp); } ; (f1)("2"); // Если следующую строку не завершить точкой с запятой, будет ошибка. var f3 = function (in

Отличие создания свойств объекта в конструкторе и через прототип конструктора в JavaScript.

Свойства, задаваемые в конструкторе, нельзя подменять через прототип. Т.е. свойство задаваемое в конструкторе скрывает одноименное свойство в прототипе. Например, для конструктора function c() { this.a = "a"; } запись c.prototype.a = "a2"; не имеет смысла (если не обращаться из объекта реализации напрямую, например myObj.constructor.prototype.a ) . Далее JavaScript код для просмотра в дебаггинге. Здесь метод  assert никогда не будет выполнен . var assert = function (res) { if (res !== true) alert("false"); } function c() { this.a = "a"; } c.prototype.b = "b"; var t1 = new c(); c.prototype.a = "a2"; c.prototype.b = "b2"; var t2 = new c(); assert(t1.a == t2.a); assert(t1.a == "a"); assert(t1.b == t2.b); assert(t1.b == "b2");

URLScan : Unable to start debugging on the web server. The web server could not find the requested resource.

Еще один сюрприз на эту тему, теперь для тех, у кого чешутся руки. Причина проблемы Есть такое средство Microsoft Web Platform Installer и решили вы им доустановить что-то новенькое. Одни из компонентов который вы выбрали был URLScan. Вы даже не почитали, для чего он нужен. :) Установка средства URLScan убивает дебаггинг сайтов на сервере IIS. И, видимо, еще много чего может убить по умолчанию. Не ставьте его на разработческие машины! Что такое URLScan URLScan это всего лишь ISAPI-фильтр (Internet Server API filter), который посажен на инсталлятор, и который слушает и фильтрует входящие на IIS запросы. "UrlScan 3.1 is a security tool that restricts the types of HTTP requests that IIS will process. By blocking specific HTTP requests, the UrlScan 3.1 security tool helps to prevent potentially harmful requests from reaching applications on the server. UrlScan 3.1 is an update to UrlScan 2.5 supports IIS 5.1, IIS 6.0 and IIS 7.0 on Windows Vista and Windows Server 2008

Что такое ASP.NET Web Pages

Что такое " ASP.NET Web Pages ", как я вижу. Это новый стиль создания сайтов в ASP.NET максимально приближенный к статическим страницам. В ASP.NET есть основные подходы Forms, MVC, а теперь еще Web Pages. * В ASP.NET легко писать и на низком уровне без использования любого из подходов. * Главная идея в Web Pages - легко начать с нуля, изучая полезности ASP.NET только по необходимости. Можно начать разрабатывать без установки Visual Studio, при помощи облегченного средства WebMatrix. В Web Pages, как и в MVC, предполагается активное использование Razor. Razor, это вставка динамического содержимого прямо в разметку HTML страницы. Такое было изначально в ASP.NET, но Razor предложил компактную, не загрязняющую HTML форму написания, которая сразу всем полюбилась. Пример Razor на картинках и сравнение со стандартными вставками здесь -  http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx Все нужное для начала работы найдется на странице http://asp.net

Невозможно загрузить файл или сборку "Microsoft.WebPages.Configuration"

Ошибка на сайтах с ASP.NET 4: Невозможно загрузить файл или сборку "Microsoft.WebPages.Configuration, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" или один из зависимых от них компонентов. Не удается найти указанный файл. или Could not load file or assembly 'Microsoft.WebPages.Configuration, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The module was expected to contain an assembly manifest. Решение: Не проверенно на последствия, но зато быстро, если надо срочно запустить сайт. Откройте файл C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Config\web.config и закомментируйте строку <add assembly="Microsoft.WebPages.Configuration, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> _ Перестановка ASP.NET 4 не помогает. Возможно поможет перестановка  ASP.NET Web Pages .

Компьютер не виден по сетевому имени.

Компьютер оказался не виден по имени компьютера в локальной сети. Пытался зайти на свой компьютер через удаленный рабочий стол (по RDP), но он оказался недоступен по своему сетевому имени. Был доступ только по IP. Решение: Windows 7, Server 2008, Vista. Откройте Панель управления \ Центр управления сетями и общим доступом . Под именем сети написано Общественная сеть Кликните по этой надписи и в открывшемся окне кликните либо Домашняя сеть либо  Сеть предприятия . Примечание: Если вы выберите  Домашняя сеть , то вам предложат создать Домашнюю группу - нажмите отмена, если вам это не надо делать, ну или настраивайте домашнюю группу. Этот пост написал потому, что не нашел ничего полезного по следующим запросам в Google: компьютер не виден по сетевому имени компьютер недоступен по имени компьютер доступен только по ip компьютер не определяется по имени в локальной сети компьютер не находится по имени в локальной сети

Переехал с http://it3xl.wordpress.com/

Я пока попробую здесь постить  http://it3xlru.blogspot.com/  . Если все понравиться, то перееду сюда из http://it3xl.wordpress.com/ .

Более поздние сообщения я мигрировал с Worpress

Внимание! Более поздние сообщения я мигрировал с Worpress, поэтому они могут быть искажены.

Ускорение компиляции Visual Studio Solution методом "Copy Local = False".

Обычное исключение из компиляции не изменяемых проектов через  Build -> Configuration Manager (колонка Build напротив каждого проекта)  не единственный подход для ускорения компиляции в Visual Studio (VS). Другой способ, строится на том, что нужно отключить поведение Visual Studio по умолчанию, когда VS копирует сборки проектов, в проекты которые ссылаются на первые. Почему и как: Если проект A ссылается на проект B, то проект B компилируется первым. По умолчанию, сборка проекта B дублируется и кладется вместе со сборкой проекта A. Подход предлагает отключить копирование сборок проектов в Solution с помощью установки свойства референса на сборку Copy Local равным False, а также помещать все сборки в общую папку. Когда применять: Я бы использовал только для крайне больших солюшенов, когда более 5 - 10 проектов. Думаю, не стоить без нужды запутывать разработку. Реализация. Общее описание, которое подойдет для существующих проектов и для вновь создаваемых. Внимание! Не приступайте к р

Способы слияния сборок .NET Framework.

 Merging assemblies приятная задачка, позволяющая на выходе получить один исполняемый файл или одну dll. Слияние (мерджинг) сборок можно выполнить двумя основными способами: Использовать утилиту слияния. Самая распространенная и бесплатная утилита, это утилита командной строки  ILMerge . Чтоб ее использовать, например, бросьте в папку главного проекта ILMerge.exe, потом зайдите в свойства этого проекта и в Buil Events пропишите в поле Post-buid events command line вызов этой утилиты, например так: "$(ProjectDir)ilmerge" /out: "$(ProjectDir) !Output \$(TargetFileName)" "$(TargetPath)" "$(TargetDir)Prived.Midved.dll" "$(TargetDir)WindowsProcessManager.dll" del "$(ProjectDir)!Output\$(ProjectName).pdb" Где ключ /out указывает куда класть не по умолчанию готовую сборку или экзешник. В нашем случае это будет папка  !Output в корне проекта. Потом перечисляются сборки, который нужно запихнуть в итоговый файл. Команда del в

Visual Studio The Watch window bug for XPath.

Ну надо же, как приятно снова встретить старинный баг, плавно перекачевавшый теперь уже в Visual Studio 2010. Окно Watch не умеет интерпретировать XPath выражения содержащие &lt; и подобрые вещи, например выражение ServiceRow[position() &lt; = $Count] в окне Watch отобразиться как недопустимое. Полностью в XSLT файле это выглядит вот так: <xsl:variable name="MyVar" select=" ServiceRow[position() &lt; = $Count] "/> В тоже время то, что будет работать в Watch, нельзя вставить в XSLT / XPath, т.к. является некорректным XML: ServiceRow[position() <= $Count] Так что не профукайте ваше время впустую. Лично мой давний запрос, по поводу этого бага, тех. поддержка Microsoft плавненько слила. :)

IIS 6.0 не выгружает файлы с расширением .exe

Если IIS 6.0 не выгружает файлы с расширением .exe, то проверьте, чтоб в настройках каталога / сайта у вас НЕ стояло "Execute permissions" равное "Scripts and Executables". В этом случае еще ошибка "HTTP Error 404" будет отображаться.

Бизнес сказал: С Индией дружить.

На днях, встретил замерзшего индийского программиста в районе Ситроникса (Москва, метро Новослободская). У Ситроникса давние терки с Индией, поэтому я уверенно направил человека туда. При этом добрый индус с уверенностью сказал, что знает что такое МТС и Форис (для тех, кто в курсе). Оказалось соврал :) . Выяснилось, что человек шел устраиваться на работу в друге место и я самолично проводил его в евоную контору. Показательно, что конторка, видимо, маленькая.

XSLT и XPath баг в MSXML 4.0.

Нашел баг XSLT и XPath в MSXML 4 . Видимо в версиях ниже он тоже есть. Если в XSLT-переменную xsl:variable положить набор нод, полученный с помощью XPath выражения preceding-sibling , то набор строк (Node Set) в этой переменной будет храниться не в том порядке, в котором он представлен в XML. Вроде, порядок нод будет обратный тогда. При этом, если перебирать Node Set напрямую в xsl:for-each, без присвоения набора в переменную xsl:variable, то все будет работать правильно. Утверждать не стану, т.к. уже не помню точно, но вроде это так. Получается в MSXML 4, preceding-sibling можно использовать только для получения количества элементов в наборе нод или для прямого перебора, но не для выборки элементов в переменную. Проиллюстрирую баг кодом. В следующей переменной FirstSecondThirdTables.Rows получим набор элементов ServiceRow, лежащих до ноды из переменной $FourthTable.Rows.First. Но порядок элементов в ней будет не такой, какой он в XML: <xsl:variable name="FirstSecon

Resharper 5 Bug - не полное инофрмирование о свойстве класса.

В Решарпере 5 средство " Show Quick Documentation " бажит не отображая корректно информацию о модификаторах доступа свойств класса. Для свойства вида public bool MyProperty { get; private set; } Show Quick Documentation (вызываемое по Ctrl-q) не отобразит, что сетер свойства приватный. Очень плохо.

Windows XP - Failed to access IIS metabase.HostingEnvironmentException. Сбой при попытке доступа к метабазе IIS.

Bug : Failed to access IIS metabase. System.Web.Hosting.HostingEnvironmentException. Сбой при попытке доступа к метабазе IIS. Известный баг проявил себя с новой стороны на Windows XP, затребовав новое решение, т.к. стандартное aspnet_regiis.exe -i не помогает. Среда : Windows XP (возможно SP3). .NET Framework 2 (3, 3.5). Возможно, машина в домене Active Directory. Причины : Установка .NET Framework 2 (3, 3.5) (ASP.NET) произведена до установки IIS. Приведенное здесь особое "лечение" требуется только на Windows XP, т.к. стандартное aspnet_regiis.exe -i  (и аналоги) не помогает. Лечение : Выполните в CMD. iisreset /stop net user ASPNET /delete rem net stop aspnet_state %WinDir% \Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i rem net start aspnet_state iisreset /start Следующее лечение не помогает : %WinDir% \Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -u %WinDir% \Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i

Outlook 2007 зависает и не реагирует. Потом может разчухаться.

Баг в Microsoft Outlook 2007. Симптомы: Outlook 2007 может зависнуть и не реагировать на любые действия пользователя. После 5-10 минут возвращается в нормальное состояние. Может повиснуть до перезагруки компьютера (видел в случае работы с адресами eMail). Также может пропасть отправка почты. Сообщения будут накапливаться в папке "Исходящие", но не отправляться. Условия: Outlook 2007 подключен к (забирает почту из) Microsoft Exchange Server. Действия вызывающие появление бага: 1. Самопроизвольно. 2. Фактически проявляется при любых действиях, которые требуют неявного или явного обращения к Exchange, например отправка почты, ввод адреса пользователя в строке "Кому" и т.д. Спасение: Из иконки Outlook в системном трее вызвать контекстное меню и нажать последний пункт - "Отменить запрос к серверу" или нужно на мгновение оборвать подключение к интернет. Outlook сразу прочухается без каких либо последствий. Вроде как, при втором способе нео

WPF Tips: Не доверяйте ложной модальности MessageBox.Show - ее надо заслужить.

Если вы расчитываете на модальности MessageBox.Show, то должен заметить, что ее легко обойти, есил MessageBox.Show("текст") вызывается в момент, когда приложение не активно. После этого вы можете закрыть окно приложения или выполнить на нем какие-либо действия, и MessageBox, как обычно, не помешает вам это сделать. Это можно поправить, всегда передавая нужное вам окно в перегрузки метода MessageBox.Show, где первым параметром принимается объект класса Window. Только учтите следующие замечания: Нельзя передать null в эти перегруженные методы. Если вам кажется неправильным тащить за собой целевое окно и вы захотите использовать Application.Current.MainWindow, то учтите, что там может быть null, если еще ни одного окна не открывалось или вы сами можете где-то в коде задать Application.Current.MainWindow = null;, а MessageBox.Show при этом порвет (выпадет на исключении)! Нужет будет утильный метод который проверяет Application.Current.MainWindow на null и вызывает перегрузку

WPF/Silverlight Tips: Коварное статическое свойствоDispatcher.CurrentDispatcher - не используйте.

Не используйте свойство Dispatcher.CurrentDispatcher!!! Или - используйте его по назначению, что фактически означает - "не используйте его никогда, чтоб не попасть в просак". Вместо него нужно использовать В WPF - Application .Current.Dispatcher . В Silverlight -  Deployment .Current.Dispatcher . Дело в том, что Dispatcher.CurrentDispatcher вернет диспатчер для текущего потока или создаст новый для потока, в котором нет еще диспатчера. Если вы работаете в потоке вашего UI, то все о.к., вы получите Dispatcher вашего UI-приложения. Но если вы работаете во внешнем потоке, то вы получите диспатчер, который никак не связан с вашими UI элементами и окнами и вы никогда не достучитесь до ваших гуев. Можно поймать неприятные баги, особенно при активном рефакторинге чужого кода. Универсальное решение для всех фреймворков SynchronizationContext .Current

ReSharper 5: Опять промашка.

Resharper 5 не умеет переименовывать алиасы неймспейсов в дерективе using . Пример кода C#:   using YYYY = XxxAaaBbbCcc; в этом выражении ReSharper не сможет переименовать YYYY .

Баг настройки сети - Основной шлюз подключения не задается, Интернетнедоступен.

 Проблема: затруднено подключении к локальной сети и отсутствие доступ к интернет. Признаки: На проблемной машине недоступен интернет, тогда как на других он есть. Основной шлюз подключения на машине не задается при включенном DHCP на роутере. Задание статических настроек для TCP/IP не помогает. Админка роутера не доступна или вместо нее отображается ваш корневой сайт на IIS (если задан). Решение - перейдите на другую подсеть. Смотрите подробнее ниже. Я опишу на моей конфигурации, вам станет понятно: Windows XP SP3, IIS 5.1. Роутер сидит на 192.168.10.1. Подсеть 255.255.255.0. Подключение к сети через Wi Fi удачно устанавливается, но значение для основного шлюза отсутствует. Вот загадка! Задаю в ручную TCP/IP - не помогает (задал статический IP, подсеть, шлюз равный IP роутера). Причина: На машине у вас поднят IIS и когда-то (или может сейчас) на нем, для сайта по умолчанию, был задан IP-адрес, такой же как сейчас используется для роутера в локальной сети.

Тонкости раздачи интернета от мобильных операторов на несколькокомпьютеров.

Изображение
После прошлого поста про  Подключение к интернет через Wi-Fi Ad-Hoc  столкнулся с жульничеством мобильных операторов связи, предлагающих мобильный интернет через флешку (мобильный брелок). Биллайн! Ммм!!! Ведь флешки для интернета поставляются с программой для удобства включения интерента. Эта программа также сделает так, чтобы ваши близкие не могли выйти в интернет с других компьютеров через ваш мобильный интернет. Прога будет делать все, чтоб подключится к сети можно было только с ноута, в который воткнута флэха. Она проконтролирует, если вы расшарили подключение для других компьютеров в вашей сети (Общий доступ к подключению к Интернету) и удалить его. Она просто заботливо удалить само подключение, когда ей удобно, и пересоздаст его с нуля. Неспортивное поведение! Уверен, что остальные операторы сотовой связи делают так же. Решения: Используйте, по возможности, 3G модем вашего мобильного телефона. Многие современные телефоны его имеют. Мобильный оператор должен помочь в