Создание пакета webdeploy для веб-сайта при создании решения
У меня есть сервисное решение WCF VS 2010, которое я хотел бы развернуть на серверах IIS 7.5 через пакет веб-развертывания. Я хотел бы создать пакет веб-развертывания при сборке проекта службы WCF. Я видел другие примеры того, как инициировать пакет веб-развертывания после сборки через импорт целей MS Build для веб-развертывания в.csproj. Но я не могу обернуться вокруг вещей, которые я могу или не могу сделать таким образом.
Я хочу, чтобы мой пакет веб-развертывания выполнял следующие задачи при развертывании на целевом сервере:
- Создайте новый веб-сайт на целевом сервере с пулом приложений для целевой платформы 4.0, которая использует идентификатор NETWORK SERVICE
- Добавьте привязки сайтов, чтобы включить net.tcp для определенного порта и включить протоколы http и net.tcp.
- Создайте веб-приложение на этом новом сайте, чтобы указать на конкретную папку файловой системы
- Запустите файл.bat, чтобы запустить несколько связанных с net.tcp сервисов для поддержки не http-активации WCF.
Из всего, что я читал о веб-развертывании, некоторые из них могут быть сделаны через файлы манифеста webdeploy и включая определенных поставщиков. Чего я не понимаю, так это сказать механизму упаковки компоновки MS, чтобы он передавал провайдерам данные в манифест и значения. Я довольно новичок в веб-развертывании, и любая помощь / указатели для решения этой проблемы будет принята с благодарностью.
3 ответа
Первые три пункта можно сделать, используя appHostConfig
провайдер, который должен быть включен, если вы установите IncludeIisSettings
а также UseIis
свойства как true
,
Последний пункт можно сделать через runCommand
провайдер как часть вашего манифеста или через preSync
/ postSync
,
WPP (материал MSBuild поверх MSDeploy) не поддерживает preSync
/ postSync
, но вы можете включить runCommand
провайдер явно использует MsDeploySourceManifest
:
<!-- Create a WebProjectName.wpp.targets file in the root
of your web application (WebProjectName)
-->
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<AfterAddContentPathToSourceManifest>
$(AfterAddContentPathToSourceManifest);
AddPostSyncProviders
</AfterAddContentPathToSourceManifest>
</PropertyGroup>
<Target Name="AddPostSyncProviders">
<MsDeploySourceManifest Include="runCommand">
<Path>absolute path to exe on target machine</Path>
</MsDeploySourceManifest>
</Target>
</Project>
К вашему сведению - runCommand
может выполнить только абсолютные пути на целевой машине в соответствии с этим вопросом.
Я использую подход MSBuild для сборки пакета и MSDeploy для его развертывания на сервере. Я использую следующую командную строку, в моем случае я использую круиз-контроль:
/p:Configuration=Release
/p:MSDeployPublishMethod=WMSVC
/p:DeployOnBuild=True
/p:DeployTarget=Package
/p:CreatePackageOnPublish=True
/p:DeployIisAppPath=$(SolutionName)/$(ProjectName)
/p:MsDeployServiceUrl=https://<servername>:8172/MsDeploy.axd
/p:AllowUntrustedCertificate=True
/p:username=<username>
/p:password=<password>
/p:EnablePackageProcessLoggingAndAssert=True
/p:PackageLocation=$(WorkingMainDir)$(ProjectName)$(ProjectType)\Package\$(SolutionName).zip
/p:IntermediateOutputPath=$(WorkingMainDir)$(ProjectName)$(ProjectType)\Temp\
/p:AutoParameterizationWebConfigConnectionStrings=true
/p:UseWPP_CopyWebApplication=true
Затем я использую msdeploy для развертывания результирующего пакета, следующая ссылка (принятый ответ) является хорошим описанием того, как это сделать:
Попробовал это, но проект не может быть загружен после этого: элемент