Быстрый деплой в GAC и рециклинг app pool для разработки под SharePoint
- Опубликовано
- • 2 мин чтения•--- просмотров
Быстрый деплой в GAC для разработчиков SharePoint
Этот пост будет полезен разработчикам SharePoint. В процессе разработки часто приходится деплоить свою .dll в GAC (Global Assembly Cache), чтобы протестировать или отладить новые функции или фиксы.
Почему GAC?
Самый быстрый способ — установить свою DLL в GAC и рециклить application pool.
Публикация и деплой полного пакета .wsp тоже возможны, но занимают в 10 раз больше времени.
Два способа быстрого деплоя в GAC
Ручной деплой для каждого проекта в решении
Шаги:
- Собери проект.
- Сделай его startup-проектом.
- Запусти кастомное действие для деплоя в GAC.
- Рецикли application pool.
Рекомендую привязать эти шаги к горячим клавишам для максимальной скорости.
Настрой в Visual Studio:
Перейди: Tools → Options → Environment → Keyboard

Мои маппинги (пример):
Build.BuildSolution:Alt + BProject.SetasStartUpProject:Alt + STools.ExternalCommand1:Alt + D(запускаетgac-deploy.ps1)Tools.ExternalCommand2:Alt + R(запускаетrec-pools.ps1)Debug.AttachtoProcess:Alt + A
Настройка 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

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

StrongName (тоже полезно)
Получить полное имя assembly можно так:
- Command:
powershell.exe - Arguments:
-command "[System.Reflection.AssemblyName]::GetAssemblyName(\"$(TargetPath)\").FullName"
- Автоматический деплой для всех проектов через VsCommandBuddy
Шаги:
- Установи расширение VsCommandBuddy
- Создай конфиг .svcb.json в папке своего решения.
- Добавь команду деплоя.
Пример скрипта PowerShell
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"
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-минутный звонок