среда, 29 сентября 2010 г.

Microsoft Magic: Setup-проекты

Вчера несколько часов убили, разбираясь с такого рода ошибками при добавлении новых файлов в установщик:
Error 39 Unable to find source file 'D:\Projects\<путь к файлу>\xxx.DLL' for assembly 'xxx.DLL', located in '[TARGETDIR]\<путь к файлу на целевой системе>'
Проблема крылась в появлении магическим образом дубликатов некой dll-ки, уже добавленной в проект ранее. Причем, у дубликатов был неверный SourcePath, из-за чего и ругалась студия.

Никаким нормальным путем, силами трех разработчиков, решить проблему не удалось. В итоге, стараясь не дышать, как-то всё же нам удалось, откатившись на последнюю рабочую версию, с третьей попытки добавить нужные файлы так, чтобы магических дубликатов не возникло...

Сегодня решил порыться в интернете на эту тему как следует, и через некоторое время обнаружил статью "Wrestling with Windows Installer", которая помогла решить проблему.

Оказывается, у Setup-проекта есть такое магическое свойство SearchPath. Вообще говоря, по умолчанию оно пустое:

 , но если нажать кнопку [...], оказывается, что по умолчанию там выставлена галочка Include standard search paths:



Если снимаешь эту галочку, то проблемы с дублирующимися dll-ками магическим образом исчезают. Вау :)

пятница, 24 сентября 2010 г.

Быстрый способ локализации Content Editor Web Part

Проблема: ContentEditorWebPart (далее CEWP) помечен как sealed, и как следствие, отнаследоваться от него мы не можем. А встроенными средствами, да, он локализацию не поддерживает. Ту, которая "на лету". По крайней мере я не нашел, как это можно сделать.

Вообще, сделать такую же вебчасть раньше не представляло совершенно никаких проблем. Например, на основе TinyMCE. Но сейчас MS реализовал классную фишку с Ribbon'ом, благодаря чему интерфейс редактора даже чем-то напоминает Word. Это выглядит очень клево, и мне нравится, и вообще это стандартная веб-часть, и здорово было бы именно её использовать.


четверг, 23 сентября 2010 г.

Рефакторинг модулей SharePoint-проектов

Есть у SharePoint несколько недоработок и тонкостей. В частности, не очень проработан рефакторинг, с чем я и столкнулся не далее как вчера. Ошибок, при этом, выдается множество самых разных, причем большинство - не слишком внятные.

Я видел вот такие ошибки:
Feature1.feature : error : The following file can not be found: "<путь к файлу>".
Error occurred in deployment step 'Activate Features': Failed to instantiate file "<имя файла>" from module "<название модуля>": Source path "Features\Feature1\<путь к файлу внутри фичи>" not found.
Error occurred in deployment step 'Activate Features': The specified name is already in use. The document or folder name was not changed. To change the name to a different value, close this dialog and edit the properties of the document or folder.
Все эти ошибки связаны с перемещением файлов между модулями (шаблон элемента SharePoint -> 2010 -> Module), переименованиями модулей и т.п.

понедельник, 20 сентября 2010 г.

On-fly локализация меню в SharePoint Foundation 2010

Как вы, наверняка, знаете, в SharePoint 2010 добавлена возможность смены локализации сайта "на лету". Однако, контент, который был внесен пользователем вручную, или создан при развертывании шаблона сайта, или создан при активации фич, не подлежит локализации "на лету". Казалось бы, довольно логично. Но что делать, если хочется?...

В SharePoint Server есть Variation Labels, есть Publishing Pages, а вот в Foundation ничего этого нет.

Я начал проработку локализации меню с двух неудачных попыток. Потратил огромную кучу времени (хотя как оказалось, всё можно сделать за полчаса), но с третьей попытки всё-таки мне удалось сделать всё как я хотел. А хотел я так:
  1. Пункты меню развертываются фичей. И удаляются тоже ею же, при деактивации. Фича развертывается в пределах веба.
  2. При переключении текущего языка на сайте, пункты меню сразу же локализуются. Т.е. сайт может смотреть одновременно несколько пользователей, и все будут видеть меню именно на выбранном ими языке.
Надеюсь, представленный ниже код сэкономит кому-нибудь кучу времени.

пятница, 17 сентября 2010 г.

Кэш SharePoint

Иногда SharePoint кэширует намертво. Не помогает ничего. Переразвертывание фич, iisreset'ы, перезапуски служб... Иногда даже ребут не помогает. Где-то сидит кэш и всё тут. За последние дни уже трижды с этим встречался, и каждый раз разбирательства отнимали у меня кучу времени...

SharePoint Cache Storage


Один раз даже хотел запостить вопрос на StackOverflow - но в итоге поборол проблему, перезагрузившись. И что вы думаете? Буквально через несколько часов, обнаруживаю на этом самом StackOverflow вопрос с точно такими же симптомами, как и мой несостоявшийся - практически 1 в 1. Тоже связан с локализацией, тоже производится развертывание фичами неких сложных элементов. У меня это была страница с элементом AllUserWebPart, а у Don Carnage не сложилось с заголовками списков.

Ну и я значит, тут же пишу этому парню, вот мол, так и так, перезагрузись, или вот тебе еще ссылка, должно помочь (а по ссылке, между прочим, очень хитрый способ, с остановкой OWSTimer, и последующим удалением строго определенных xml-файлов). Он видимо тоже обрадовался, даже ассептнул поначалу мой ответ, но уже через пару часов смотрю - снимает ассепт. НЕ ПОМОГЛО!!

Так и хотелось написать: SharePoint has you :)

Update: От кэша resx-файлов, похоже, гарантированно спасает удаление файлов из папки C:\Users\%username%\AppData\Local\assembly\dl3 (в Windows 7). Перед этим, как правило, требуется закрыть студию.

четверг, 16 сентября 2010 г.

Блоги на SharePoint 2010

Часть блогов на sharepoint.microsoft.com переведена на использование SharePoint 2010 (например, Steve Walker's SharePointing Blog). Ну что я могу сказать, не фонтан. В комментах - спам, хоть и написано про content approval (может, поздно включили?). Можно перейти на просмотр всего контента узла, и посмотреть даже не аппрувленные комментарии (а ведь это всё индексируется!). Сами комменты какие-то дурные, и еще такое ощущение, что регистрация пользователей там не предусмотрена... Юзабилити отвратительное. Никаких особых фишек нет, всё крайне примитивно. Ни рейтингов, ни related posts, ни ленты последних комментариев, ни колонки лучших комментаторов... Да, очень бесит, что подсветку синтаксиса ввести в свои посты ребята почему-то не удосужились (хотя можно ведь! пусть даже и сторонней утилитой, как, например, я это делаю здесь, на Blogger'е). Плюс к тому, все эти блоги почему-то периодически зависают и не выдают контент.
Меня эти факты всё больше укрепляют во мнении, что SharePoint - это всё-таки фреймворк, а не CMS. Т.е., его нужно обязательно очень серьезно настраивать и кастомизировать, прежде чем выкладывать, особенно если выкладываешь в интернет...

Причем, с другой стороны, ведь если как следует довести до ума, я уверен - получатся очень и очень хорошие блоги...

среда, 15 сентября 2010 г.

Deskwork

Про продукт, который мы разрабатываем, выпустили видеоролик. Качественно делают, блин. Я б тоже хотел так уметь! В блог бы вставлял... :)

вторник, 14 сентября 2010 г.

Внутри stackoverflow: первые впечатления

Я уже упоминал, что недавно зарегистрировался на stackoverflow. Хочу поделиться первыми впечатлениями использования этого сайта.


Первым делом, отмечу, что вопросы я сам пока не задавал, только отвечал. Как правило, у меня банально не хватает терпения дождаться хорошего ответа. Работа авральная, решения нужны быстрые. Если хорошего решения не находится сразу, в течение получасового поиска в гугле - использую какой-нибудь workaround. Но не все такие, как я. И помогая людям, которые задают вопросы, я и сам многому могу научиться.


понедельник, 13 сентября 2010 г.

Вложенные тэги

Блог у меня молодой и развивающийся. Поэтому многие организационные вопросы еще не решены.

Вот сегодня, ломал голову, как же организовать тэги по SharePoint'у в блоге.


воскресенье, 12 сентября 2010 г.

Многоязычные установщики MSI

Буквально вчера зарегился на StackOverflow, и обнаружил любопытный вопрос по Microsoft Installer. В результате поиска в документации, книжках и интернете, удалось установить: оказывается, создание многоязычных msi-установщиков возможно! Причем, без всяких bootstrapper'ов.

Хитрость заключается в использовании embedded transforms и недокументированной возможности Windows Installer.

среда, 8 сентября 2010 г.

Cruise Control .Net и развертывание SharePoint-продуктов

Благодаря Cruise Control .Net (далее - CCNet) недавно удалось решить несколько важных проблем на работе, поэтому спешу поделиться!


Кто не знает, CCNet - это программный комплекс, предназначенный для непрерывной интеграции, т.е. для организации постоянных сборок продукта (например, каждый час). Непрерывная интеграция в простейшем виде позволяет отследить людей, которые коммитят не компилящийся код. Если же немного повозиться с настройками - у вас в руках окажется мощнейший инструмент для автоматизированного тестирования. К тому же, бесплатный...

Ниже речь пойдет о применении CCNet для непрерывной интеграции большого коробочного продукта под SharePoint.

воскресенье, 5 сентября 2010 г.

Экзамены по SharePoint

Готовлюсь к 70-542, MOSS 2007. Почему 2007? Потому что у меня по нему большой и хороший опыт, а буду ли работать вообще с SharePoint Server 2010 - неизвестно.

Хочу такой :)
Вообще, нас хотели отправить на сертификацию массово, еще зимой, но по ряду причин (главным образом из-за авралов) - не отправили. А в июле 2010го (почти одновременно с появлением экзаменов по 2010-му шарику), как выяснилось, обновились вопросы экзамена 70-542. И их дампов, между прочим, до сих пор нигде нет!

Вы скажете, - "Ага, злобный дампер"?

четверг, 2 сентября 2010 г.

.Net Framework Setup-проект - организация обновлений

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

Как выяснилось, обновления для стандартных проектов .Net Setup Project - задача, требующая знания некоторых довольно тонких ньюансов.