← Назад в блог

Быстрый деплой в GAC и рециклинг app pool для разработки под SharePoint

Опубликовано
2 мин чтения
--- просмотров

Быстрый деплой в GAC для разработчиков SharePoint

Этот пост будет полезен разработчикам SharePoint. В процессе разработки часто приходится деплоить свою .dll в GAC (Global Assembly Cache), чтобы протестировать или отладить новые функции или фиксы.


Почему GAC?

Самый быстрый способ — установить свою DLL в GAC и рециклить application pool.
Публикация и деплой полного пакета .wsp тоже возможны, но занимают в 10 раз больше времени.


Два способа быстрого деплоя в GAC

Ручной деплой для каждого проекта в решении

Шаги:

  1. Собери проект.
  2. Сделай его startup-проектом.
  3. Запусти кастомное действие для деплоя в GAC.
  4. Рецикли application pool.

Рекомендую привязать эти шаги к горячим клавишам для максимальной скорости.

Настрой в Visual Studio:
Перейди: Tools → Options → Environment → Keyboard

Visual Studio Keybindings

Мои маппинги (пример):

  • Build.BuildSolution: Alt + B
  • Project.SetasStartUpProject: Alt + S
  • Tools.ExternalCommand1: Alt + D (запускает gac-deploy.ps1)
  • Tools.ExternalCommand2: Alt + R (запускает rec-pools.ps1)
  • Debug.AttachtoProcess: Alt + A

Настройка External Commands:

External Commands

GacDeploy

  • Command: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
  • Arguments: -file "C:\gac-deploy.ps1" $(TargetPath)
  • Initial Directory: $(ItemDir)
  • Включи: Use Output Window
GAC Deploy Setup

RecPools

  • Command: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
  • Arguments: -file "C:\rec-pools.ps1"
  • Initial Directory: $(ItemDir)
  • Включи: Use Output Window
Recycle Pools Setup

StrongName (тоже полезно)

Получить полное имя assembly можно так:

  • Command: powershell.exe
  • Arguments:
    -command "[System.Reflection.AssemblyName]::GetAssemblyName(\"$(TargetPath)\").FullName"
    
  1. Автоматический деплой для всех проектов через VsCommandBuddy

Шаги:

  1. Установи расширение VsCommandBuddy
  2. Создай конфиг .svcb.json в папке своего решения.
  3. Добавь команду деплоя.

Пример скрипта PowerShell

gac-deploy.ps1 (GitHub)

param([String[]]$dllPath)

Import-Module WebAdministration

$gacutil = "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\gacutil.exe"

foreach($i in $dllPath) {
    Write-Host "[x] Installing $i"
    & $gacutil -i $i
}

& "$PSScriptRoot\Recycle-Pools.ps1"

Recycle-Pools.ps1

Import-Module WebAdministration

$appCmd = "C:\Windows\System32\inetsrv\appcmd.exe"

$appPools = @("SharePoint - 80", "SharePoint - 4448")

foreach ($pool in $appPools) {
    & $appCmd recycle apppool /apppool.name:"$pool"
}

Start-Sleep -Seconds 5

net stop SPTimerV4
net start SPTimerV4

& $appCmd list wp

Конфигурация CommandBuddy (.svcb.json)

{
  "cmdname": "deploy",
  "title": "deploy",
  "description": "deploy",
  "cwd": "$(SolutionDir)",
  "filename": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
  "arguments": "-command \"C:\\gac-deploy.ps1\" -dllPath  $(SolutionDir)\\Project1\\bin\\$(Configuration)\\Project1.dll,$(SolutionDir)\\Project2\\bin\\$(Configuration)\\Project2.dll,$(SolutionDir)\\Project3\\bin\\$(Configuration)\\Project3.dll",
  "async": false
}
  • $(SolutionDir) — полный путь к твоему решению.
  • $(Configuration) — конфигурация сборки (например, Debug/Release).

Запусти это из: Tools → Deploy

Открыт для работы по контракту

Я доступен для работы по контракту. Если у вас есть интересная идея проекта — запишитесь на звонок через Calendly.

Записаться на 30-минутный звонок