Dkms's Blog on WordPress

Размещение общего Sharepoint-кода

Posted in Sharepoint, Visual Studio by DkmS on 01.05.2011

Часто бывает удобно выделить общий для нескольких проектов код в отдельную сборку и подключать её к проектам. Собственно, так же, как и чей-то чужой код в виде готовой сборки (с codeplex.com и подобных ресурсов).

При этом сразу же встаёт во весь рост проблема размещения такого общего кода. Очевидное, простое и поэтому неправильное решение, быстро приходящее в голову – поместить общие сборки в пакет каждого использующего их проекта – отметается после удаления одного из таких пакетов. Общие сборки тоже удаляются и остальные решения перестают работать. Схожу с ума от злости

Попытки использовать имеющиеся под рукой установщики (Установщик Visual Studio 2010, Wix Toolset 3.5, InstallShield LE, установщик 7-zip и т.п.) оказались плачевными – либо пользоваться неудобно, либо не имеет нужной функциональности, либо не умеет обновлять ранее установленные сборки. Мрак какой-то… Палец вниз

Лучшим вариантом оказался собранный вручную wsp-пакет в сопровождении двух cmd-файлов  для установки и обновления.

Описание пакета в файле makecab.ddf:

.OPTION EXPLICIT                    ; Generate errors on variable typos
.Set CabinetNameTemplate=SP.Shared.Assemblies.wsp  ; The name of the WSP file
.set DiskDirectoryTemplate=CDROM    ; All cabinets go in a single directory
.Set CompressionType=MSZIP
.Set Cabinet=on
.Set Compress=on
.Set DiskDirectory1=.
.Set CabinetFileCountThreshold=0 
.Set FolderFileCountThreshold=0 
.Set FolderSizeThreshold=0 
.Set MaxCabinetSize=0 
.Set MaxDiskFileCount=0
.Set MaxDiskSize=0

SharedAssembly.dll
SharedAssembly2.dll 
...
manifest.xml 

Файл manifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<Solution xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
SolutionId="guid..." 
xmlns="http://schemas.microsoft.com/sharepoint/">
  <Assemblies>
    <Assembly Location="SharedAssembly.dll" DeploymentTarget="GlobalAssemblyCache"/>
    <Assembly Location="SharedAssembly2.dll" DeploymentTarget="GlobalAssemblyCache"/>
  </Assemblies>
</Solution>

Собирается пакет командой makecab /v1 /f makecab.ddf, устанавливается файлом _install.cmd :

@set prompt=$g
@set spver=14
@set wsp=SP.Shared.Assemblies.wsp
@set admpgm="%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\%spver%\BIN\STSADM.EXE"
@time /t
%admpgm% -o addsolution -filename %wsp% 
%admpgm% -o deploysolution -name %wsp%  -allowCasPolicies -allowGacDeployment -immediate -force
@pause
%admpgm% -o execadmsvcjobs

Для обновления используем файл _upgrade.cmd :

@set prompt=$g
@set spver=14
@set wsp=SP.Shared.Assemblies.wsp
@time /t
@set admpgm="%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\%spver%\BIN\STSADM.EXE"
%admpgm% -o upgradesolution -name %wsp% -filename %wsp% -immediate -allowCasPolicies -allowGacDeployment
pause
%admpgm% -o execadmsvcjobs

Конечно, в соответствии с новомодными тенденциями можно применить PowerShell, но некоторым так привычней Шучу

Technorati Tags:
Tagged with:

Sharepoint, виртуальный домен и инструменты

Posted in Sharepoint, Visual Studio by DkmS on 24.05.2010

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

Кандидаты на эти инструменты – Visual Studio и Sharepoint Designer. При помощи второго обычно делаю рабочие процессы “на скорую руку” (когда они несложные и надо быстро и в одном экземпляре) и разные эксперименты. Студия же служит для всего остального. Сюрпризы начались (или, скорее, наоборот, сюрприза не случилось…) уже с Дизайнера – для разных версий платформы необходимо использовать свои специальные версии инструмента. Понятно, когда требуется заставить покупать новую версию, но здесь-то продукт бесплатный… Или только до поры бесплатный? В общем, получается замусоривание дисков и Сети дистрибутивом нехилых размеров.

Со Студией ещё печальней – кроме использования разных её версий для разных версий Шарепойнта существует и необходимость установки Студии на том же компьютере, на котором установлен Шарепойнт. Только в такой комбинации существует возможность использовать (создавать, редактировать и отлаживать) типы проектов, относящиеся к Шарепойнту. Конечно, при необходимости можно приложить некоторые усилия (не очень, впрочем, маленькие) и обойти какие-то ограничения. Например, можно сделать собственные шаблоны проектов, которые не требуют установки Шарепойнта и Студии на одном компьютере (наподобие этого и этого). Однако отладку рабочего процесса только на сервере подобные способы никак не отменяют.  Новые версии Шарепойнта и Студии для исправления такого положения добавляют крайне мало (нужно долго присматриваться, чтоб изменения заметить). Даже .NET 4.0 использовать нельзя…

В итоге, собственно, всё остаётся по-прежнему – на каждый сервер с установкой Шарепойнта ставим свою версию Студии (для WSS 2007 – VS 2008 ENU + VSeWSS v.1.3, для SPF 2010 – VS 2010 любой локализации).

Вообще, чем больше присматриваешься к новым версиям платформы и инструментов, тем меньше видишь в них что-либо по-настоящему новое и полезное, чего нельзя было бы сделать простым усовершенствованием WSS 2007 и Visual Studio 2008.  При этом, конечно, сильно не пошумишь и всяких “Запусков” с Launchами не поустраиваешь. Какая-то маскировка получается при помощи бантиков, песен и плясок.

Technorati Tags: , ,

Шаблон проекта рабочего процесса

Posted in Sharepoint, Studio 2010, Visual Studio by DkmS on 24.03.2010

Выложил шаблон проекта по разработке на C# рабочего процесса для Шарепойнта. Включены средства работы с файлом конфигурации, с почтой (в т.ч. внешней типа gmail.com), средства установки, обновления и др.

Technorati Tags: ,

Поведение метода Lists.GetListItems

Posted in Sharepoint, Studio 2010 by DkmS on 19.02.2010

Заинтересовали результаты поисков по теме, поднятой на GDN – получается, что метод какой-то совсем кривой и некоторые параметры обрабатывать не умеет. С учётом того, что в некоторых своих разработках метод использую, провёл небольшое исследование поведения метода Lists.GetListItems (обработка параметров viewFields и queryOptions).

Краткие результаты:

  1. Поведение метода зависит от типа ссылки на сервис (WCF или WS) и от типа программы, в которой метод используется (веб-часть/консольное приложение).
  2. В веб-части параметры обрабатываются правильно при использовании WS-ссылки.
  3. В консольном приложении – при использовании WCF-ссылки.
  4. Элемент IncludeMandatoryColumns не обрабатывается во всех вариантах.

При исследовании использовалась Visual Studio 2008. При использовании Студии 2010 RC(консольное приложение, переработанное с учётом сюрприза) WCF-ссылка не принимает во внимание все параметры, WS-ссылка правильно обрабатывает только viewFields.

Technorati Tags:

Сюрприз-2010

Posted in Глюкалово, Sharepoint, Studio 2010 by DkmS on 16.02.2010

На этот раз сюрприз преподнесла новейшая и крутейшая Visual Studio 2010 RC. Наблюдается сюрприз при генерации ссылки на сервис (Service Reference) для работы со списками Шарепойнта /_vti_bin/Lists.asmx. Результаты такой генерации заметно отличаются от таковых, выполненных Студией 2008 и описанных в SDK. Например, метод клиента GetListItems отличается как по типам параметров, так и по типу результата (сверху – описание из VS 2010, внизу – из VS 2008):

сравнение результатов

При этом результат не зависит от целевой версии .NET. Кроме того, при конвертации Студией 2010 проекта с правильным прокси типы тоже конвертируются и проект перестаёт собираться. В общем, при переходе на новую Студию скучно не будет…

Technorati Tags: ,
Follow

Get every new post delivered to your Inbox.

Join 76 other followers