asp.net mvc - dotnet - ¿Cómo usar MsBuild MsDeployPublish para atacar el sistema de archivos local?
dotnet publish profile (3)
Estoy tratando de replicar el comando "Publicar ..." de Visual Studio 2010 (aplicable a proyectos de aplicaciones web) donde en la interfaz de usuario elegiría el método de publicación: "Sistema de archivos".
Mi intento de esto es ...
% msbuild% / t: MsDeployPublish / property: MsDeployServiceUrl = "file: /// d: / MyDeploymentFolder"; MsDeployPublishMethod = "File System" "d: / MySourceFolder / Project.csproj"
... y después de haber probado un método de "Sistema de archivos", "Sistema de archivos", "Local" y algunos otros.
El error que recibo implica que MsDeploy todavía está intentando enviar a un servidor IIS:
"D:/MySourceFolder/Project.csproj" (MsDeployPub
lish target) (1) ->
(MSDeployPublish target) ->
C:/Program Files (x86)/MSBuild/Microsoft/VisualStudio/v10.0/Web/Microsoft.Web
.Publishing.targets(3847,5): error : Web deployment task failed.(The metabase k
ey ''/lm/w3svc'' could not be found.) [D:/MySourceFolder/Project.csproj]
C:/Program Files (x86)/MSBuild/Microsoft/VisualStudio/v10.0/Web/Microsoft.Web.P
ublishing.targets(3847,5): error : /r [D:/MySourceFolder/Project.csproj]
C:/Program Files (x86)/MSBuild/Microsoft/VisualStudio/v10.0/Web/Microsoft.Web.P
ublishing.targets(3847,5): error : The metabase key ''/lm/w3svc'' could not be fo
und./r [D:/MySourceFolder/Project.csproj]
C:/Program Files (x86)/MSBuild/Microsoft/VisualStudio/v10.0/Web/Microsoft.Web.P
ublishing.targets(3847,5): error : Unable to access the IIS configuration syste
m. Please make sure you have IIS 7 (or later) installed./r [D:/MySourceFolder/Project.csproj]
C:/Program Files (x86)/MSBuild/Microsoft/VisualStudio/v10.0/Web/Microsoft.Web.P
ublishing.targets(3847,5): error : Retrieving the COM class factory for compone
nt with CLSID {2B72133B-3F5B-4602-8952-803546CE3344} failed due to the followin
g error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REG
DB_E_CLASSNOTREG)). [D:/MySourceFolder/Project.csproj]
¿Cómo puedo dirigir el sistema de archivos para la implementación, ya que Visual Studio normalmente me permite ingresar en la GUI?
De acuerdo con mi respuesta de Using MSBuild, ¿cómo compilo una solución MVC4 desde la línea de comandos (aplicando las transformaciones de Web.config en el proceso) y las envío a una carpeta?
msbuild ProjectFile.csproj /p:Configuration=Release ^
/p:Platform=AnyCPU ^
/t:WebPublish ^
/p:WebPublishMethod=FileSystem ^
/p:DeleteExistingFiles=True ^
/p:publishUrl=c:/output
O si está construyendo el archivo de solución:
msbuild Solution.sln /p:Configuration=Release ^
/p:DeployOnBuild=True ^
/p:DeployDefaultTarget=WebPublish ^
/p:WebPublishMethod=FileSystem ^
/p:DeleteExistingFiles=True ^
/p:publishUrl=c:/output
No creo que estés siendo lo suficientemente específico con lo que le estás diciendo a msbuild.
Saqué esto de uno de mis marcadores sobre el tema, con suerte ayudará: http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild
Renuncié a intentar que MSBuild copiara los archivos web desplegables (y no hiciera nada más que eso), así que escribí en PowerShell y estoy realmente contento con el resultado. Mucho más rápido que cualquier cosa que probé a través de MSBuild. Aquí está la esencia ( literally ):
function copy-deployable-web-files($proj_path, $deploy_dir) {
# copy files where Build Action = "Content"
$proj_dir = split-path -parent $proj_path
[xml]$xml = get-content $proj_path
$xml.Project.ItemGroup | % { $_.Content } | % { $_.Include } | ? { $_ } | % {
$from = "$proj_dir/$_"
$to = split-path -parent "$deploy_dir/$_"
if (!(test-path $to)) { md $to }
cp $from $to
}
# copy everything in bin
cp "$proj_dir/bin" $deploy_dir -recurse
}