Я предполагаю, что вы правильно настроили свой сервер для WebDeploy 2.0 согласно этой статье:
Настройка веб-развертывания (IIS.NET)
Примечание: MS выпустила обновление Web Deploy 2.0, и исходная ссылка больше не действительна. Я обновил это, но я думаю, что со временем это будет движущаяся цель.
Вам также необходимо установить Web Deploy 2.0 на компьютере разработчика / сборки / CI.
Если вы все еще используете 1.0, тогда я рекомендую обновить, в 2.0 есть несколько значительных улучшений.
Использование функции публикации Visual Studio 2010:
Visual Studio может опубликовать сайт, щелкнув правой кнопкой мыши на сайте и выбрав «Опубликовать». Это вызывает следующий диалог:
Существует несколько проблем с Visual Studio 2010 и WebDeploy 2.0. Во-первых, VS2010 не поддерживает WebDeploy / MSDeploy 2.0. Поэтому, если вы попытаетесь опубликовать, вы получите ошибку, такую как:
Ошибка 1 Задача веб-развертывания
не удалось. ((02.04.2011 12:30:40) Ошибка
произошло, когда запрос был
обрабатывается на удаленном компьютере.)
Вы также увидите следующую ошибку в Трассировке невыполненных запросов для службы веб-управления на сервере в C:\inetpub\logs\wmsvc\TracingLogFiles\W3SVC1
при условии, что она включена:
AspNetModuleDiagErrorEvent
Uri /msdeploy.axd
EventData Tracing
исключение агента развертывания. Запросить ID
''. Отметка времени запроса: '02 / 04/2011
System.UnauthorizedAccessException: доступ к пути 'D: \' запрещен.
Буква диска зависит от того, на каком диске находится ваш сайт IIS.
По умолчанию механизм публикации в графическом интерфейсе по умолчанию использует неверную версию MSDeploy (1.0). Мы хотим сказать VS2010 использовать MSDeploy 2.0. Вы можете сделать это, отредактировав файл devenv.exe.config
Visual Studio 2010, который находится в (при условии, что вы установили диск по умолчанию c:\
):
Для 64-битных систем: c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE
Для 32-битных систем: c:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE
Откройте devenv.exe.config
в своем любимом редакторе XML (я только что использовал Visual Studio 2010) и скопируйте следующий xml:
<dependentAssembly>
<assemblyIdentity
name="Microsoft.Web.Deployment"
publicKeyToken="31bf3856ad364e35" culture="neutral"/>
<bindingRedirect oldVersion="7.1.0.0" newVersion="8.0.0.0"/>
</dependentAssembly>
Добавьте это в /configuration/runtime/assemblyBinding
раздел:
После этого закройте все экземпляры Visual Studio 2010, чтобы изменения вступили в силу. Перезапустите VS2010, откройте веб-проект и повторите попытку публикации. На этот раз это должно быть успешно.
Публикация с использованием пакета сборки:
Visual Studio может создать пакет сборки, который может быть выполнен из командной строки. Это генерируется с помощью Project -> Build Deployment Package
. Удобно для непрерывной интеграции и тому подобного (пакет также может быть сгенерирован с помощью msbuild с переключателем /t:Package
).
Выходная папка для пакета обычно по умолчанию obj\Package
.
К сожалению, Visual Studio 2010 немного ошибается и генерирует пакетный скрипт-оболочку msdeploy с таргетингом 1.0 и развертыванием на сервере, а не на уровне сайта.
Нет быстрого решения этой проблемы, кроме создания собственной командной строки msdeploy.exe. Я разделил это на несколько строк, чтобы сделать его немного более читабельным.
"C:\Program Files\IIS\Microsoft Web Deploy v2\\msdeploy.exe"
-source:archiveDir='d:\sites\DemoApp\obj\Package\Archive'
-dest:
auto,
computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename',
userName='demosite',
password='somepassword',
authtype='basic',
includeAcls='False'
-verb:sync
-disableLink:AppPoolExtension
-disableLink:ContentExtension
-disableLink:CertificateExtension
-setParamFile:"d:\sites\DemoApp\obj\Package\Archive.SetParameters.xml"
-allowuntrusted
Первое, что нужно отметить, это путь к msdeploy.exe
. Visual Studio генерирует путь к версии 1.0. Я изменил это, чтобы использовать 2.0.
Значимые параметры:
-source:archiveDir=
сообщает msdeploy о развертывании пакета и указывает локальное местоположение
computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename'
- это говорит MSDEPLOY о развертывании на определенном сайте на IIS7. yoursitename
должно точно соответствовать названию сайта в IIS.
userName
и password
- это имя делегированного менеджера пользователя для сайта. Это настраивается с помощью функции «Разрешения диспетчера IIS» на уровне сайта. Учетная запись должна быть локальной учетной записью пользователя Windows.
-authtype='basic'
- это вызывает базовую аутентификацию, в противном случае предпринимается попытка аутентификации NTLM.
-allowuntrusted
- это игнорирует любые ошибки сертификата SSL, если вы используете встроенный самозаверяющий сертификат SSL.
Если вы используете эту командную строку, то сможете успешно выполнить развертывание на удаленном сервере IIS7.
Публикация необработанного содержимого:
Иногда мы хотим просто опубликоватьнекоторый статический контент (или даже классический сайт ASP или PHP) прямо из локальной папки.Мы можем сделать это, используя следующую msdeploy.exe
командную строку:
"C:\Program Files\IIS\Microsoft Web Deploy v2\\msdeploy.exe"
-source:contentPath='d:\websites\mysite'
-dest:
contentPath='yoursitename',
computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename',
userName='demosite',
password='somepassword',
authtype='basic',
includeAcls='False'
-verb:sync
-allowuntrusted
Снова применяются те же правила, что и для -dest:contentPath
и computerName
.
Я считаю, что версия MSDeploy вызывает проблемыбудет решена в пакете обновления 1 (который я еще не успел посмотреть).
Один финал VS2010 Получено:
При публикации с использованием Visual Studio 2010,Пакет сборки «Публикация» приводит к тому, что списки ACL анонимной учетной записи сайта изменяются на «Только чтение» для всех файлов и папок, за исключением папки App_Data
, которая изменяется на «Чтение и запись».
Это может бытьЧтобы обойти эту проблему, добавьте следующий параметр в файл .csproj
для каждого <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
:
<IncludeSetAclProviderOnDestination>False</IncludeSetAclProviderOnDestination>
Или, если вы используете msbuild:
msbuild.exe myproject.csproj /t:Package /p:IncludeSetAclProviderOnDestination=False
Я нашел этот полезный слепокотсюда:
Пропуск настройки ACL в пакете развертывания Visual Studio 2010 (ссылка на WayBackMachine, поскольку исходное содержимое больше недоступно)