estoy suponiendo que haya configurado el servidor correctamente para WebDeploy 2.0 de acuerdo con este artículo:
Configure Web Deploy (IIS.NET)
Nota: MS han lanzado una actualización de Web Deploy 2.0 y el enlace original ISN' t realmente valido más. He actualizado esto, pero creo que será un objetivo móvil en el tiempo.
También necesita instalar Web Deploy 2.0 en su máquina de desarrollo/construcción/CI.
Si todavía está utilizando la versión 1.0, le recomiendo que actualice, hay algunas mejoras importantes en la versión 2.0.
El uso de Visual Studio 2010 publica Característica:
Visual Studio puede publicar un sitio haciendo clic derecho en el sitio y seleccionando la opción "Publicar".Esto nos lleva a la siguiente diálogo:

Hay un par de pifias con Visual Studio 2010 y WebDeploy 2.0. El primero es que VS2010 no es consciente de WebDeploy/MSDeploy 2.0. Así que si intenta publicar obtendrá un error como el siguiente:
Error 1 Web deployment task failed.((04/02/2011 12:30:40) An error occurred when the request was processed on the remote computer.)

También verá el siguiente error en la solicitud ha fallado seguimiento para el servicio de administración web en el servidor de C:\inetpub\logs\wmsvc\TracingLogFiles\W3SVC1
suponiendo que tiene esta encendido:
AspNetModuleDiagErrorEvent
Uri /msdeploy.axd
eventData Tracing deployment agent exception. Request ID ''. Request Timestamp: '02/04/2011
System.UnauthorizedAccessException: Access to the path 'D:\' is denied.

La letra de la unidad variará alojamiento a qué unidad se encuentra su sitio IIS.
Fuera de la caja, el mecanismo de publicación en la GUI usa de manera predeterminada la versión incorrecta de MSDeploy (1.0). Queremos decirle a VS2010 que use MSDeploy 2.0. Usted puede hacer esto mediante la edición de Visual Studio archivo de 2010 devenv.exe.config
que se encuentra en (suponiendo que hizo un c:\
unidad de instalación por defecto):
para 64 sistemas de bits: c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE
para 32 sistemas de bits: c:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE
abren devenv.exe.config
en el editor de XML favorito (acabo de utilizar Visual Studio 2010 sí mismo) y copiar el siguiente código XML:
<dependentAssembly>
<assemblyIdentity
name="Microsoft.Web.Deployment"
publicKeyToken="31bf3856ad364e35" culture="neutral"/>
<bindingRedirect oldVersion="7.1.0.0" newVersion="8.0.0.0"/>
</dependentAssembly>
añadir esto a la sección /configuration/runtime/assemblyBinding
:

Una vez que haya hecho esto, cierre todas las instancias de Visual Studio 2010 para permitir que este cambio surta efecto. Reinicie VS2010, abra un proyecto web y luego intente publicar de nuevo. Esta vez debería ser exitoso.
Publishing utilizando una creación del paquete:
Visual Studio puede producir una creación del paquete que se puede ejecutar desde la línea de comandos. Esto se genera usando Project -> Build Deployment Package
. Práctico para la integración continua y similares (el paquete también se puede generar usando msbuild con el interruptor /t:Package
).
La carpeta de salida para el paquete suele tener como valor predeterminado obj\Package
.
Desafortunadamente, Visual Studio 2010 obtiene esto un poco mal y genera una secuencia de comandos por lotes envoltura msdeploy objetivo 1.0 y la implementación de destino en el servidor en lugar de nivel del sitio.
No hay una solución rápida para esto aparte de crear su propia línea de comando msdeploy.exe. He dividido esta en varias líneas para hacer esto un poco más legible .:
"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
La primera cosa a destacar es el camino a msdeploy.exe
. Visual Studio genera una ruta a la versión 1.0. Cambié esto para usar 2.0.
parámetros notables:
-source:archiveDir=
brinda información sobre MSDeploy estamos implementación de un paquete y proporciona la ubicación local
computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename'
- dice esto MSDeploy para desplegar a un sitio específico en IIS7. yoursitename
debe coincidir exactamente con el nombre del sitio en IIS.
userName
y password
son el nombre del usuario de administrador delegado para el sitio. Esto se configura mediante la función "Permisos del Administrador IIS" en el nivel del sitio. La cuenta debe ser una cuenta de usuario de Windows local.
-authtype='basic'
- esto fuerza la autenticación básica, de lo contrario se intenta la autenticación NTLM.
-allowuntrusted
- esto ignora cualquier error de certificado SSL si utiliza el certificado SSL autofirmado incorporado.
Si usa esa línea de comando, entonces debería ser capaz de implementar en un servidor remoto IIS7 con éxito.
Publishing Raw Contenido:
A veces queremos publicar sólo algunas de contenido estático (o tal vez incluso un ASP clásico o sitio PHP) directamente desde una carpeta local. Podemos hacer esto utilizando la línea de comandos msdeploy.exe
siguiente:
"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
Una vez más las mismas reglas se aplican como antes para -dest:contentPath
y computerName
.
Creo que los problemas de la versión de MSDeploy se resolverán en SP1 (que aún no he podido ver).
Una final VS2010 Gotcha:
Al publicar utilizando Visual Studio 2010, el "Publicar" construir el paquete hace que el ACL de la cuenta anónima del sitio para cambiar a sólo lectura para todos los archivos y carpetas con la excepción de la carpeta App_Data
que se cambia a Lectura y escritura.
Esto se puede evitar mediante la adición de la siguiente configuración en el fichero de .csproj
en cada <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
:
<IncludeSetAclProviderOnDestination>False</IncludeSetAclProviderOnDestination>
O si está usando msbuild:
msbuild.exe myproject.csproj /t:Package /p:IncludeSetAclProviderOnDestination=False
encontré esa pepita útil a partir de aquí:
Skipping setting an ACL in a Visual Studio 2010 deployment package (WayBackMachine link because the original content is no longer available)
Esta es una excelente publicación de Kev: información realmente útil aquí. Para mi problema, sin embargo, todavía vi 401 errores de autenticación a menos que use la cuenta de administrador de la computadora (que se explica en mi propia respuesta a continuación). –
El msdeploy.axd? Site = yoursitename es lo que me solucionó. Si dejé el parámetro del sitio obtuve un 401. Gracias – Schneider
Gracias por esta increíble respuesta. ? site = ... fue lo que acabo de pasar 3 horas de mi vida! :) – Ragesh