asp.net - visual - web deploy iis
"¿No puede encontrar el AspnetMergePath válido" en la publicación de Visual Web Developer? (6)
Deseo utilizar Visual Web Developer Express 2010 para publicar un sitio web, precompilado en un servidor remoto a través de FTP utilizando la siguiente configuración:
- Implemente solo los archivos necesarios para ejecutar esta aplicación
- Precompila esta aplicación antes de publicarla.
- Permitir que el sitio web sea actualizable
- No se están desplegando bases de datos
- El sitio se implementa como una jerarquía de archivos, no como un paquete .zip
Mi primera compilación / implementación parecía haber ido bien, pero después de mi segunda compilación recibí el siguiente error:
Transformed web.config using C:/path_to_site/Web.Debug.config into obj/Debug/TransformWebConfig/transformed/web.config.
Copying all files to temporary location below for package/publish:
obj/Debug/AspnetCompileMerge/Source.
C:/Program Files (x86)/MSBuild/Microsoft/VisualStudio/v10.5/Web/Transform/Microsoft.Web.Publishing.AspNetCompileMerge.targets(132,5): Error : Can''t find the valid AspnetMergePath
Y aquí hay un subconjunto del contenido del archivo Microsoft.Web.Publishing.AspNetConfigurationMerge.targets:
<Target
Name="GetAspNetMergePath"
DependsOnTargets="$(GetAspNetMergePathDependsOn)"
Condition ="''$(GetAspNetMergePath)'' != ''false''">
<PropertyGroup>
<AspnetMergeName>aspnet_merge.exe</AspnetMergeName>
<AspnetMergePath Condition="Exists(''$(TargetFrameworkSDKToolsDirectory)$(AspnetMergeName)'')">$(TargetFrameworkSDKToolsDirectory)</AspnetMergePath>
</PropertyGroup>
<Error Condition="''$(AspnetMergePath)'' == '''' Or !Exists($(AspnetMergePath))"
Text="Can''t find the valid AspnetMergePath" />
</Target>
EDITAR: cambiar la configuración de publicación para eliminar todos los archivos existentes antes de la publicación no soluciona el problema después de todo. Supongo que el problema es local por ahora debido a esto.
No parece haber una etiqueta AspMergePath en mi web.config. No sé si debo agregar la etiqueta manualmente. Sin embargo, la ruta "obj {configuración de publicación} / AspnetCompileMerge / Source" existe en mi proyecto.
Y en caso de que importe, el nombre de mi proyecto es "TestProject.NET"
Su opinión es apreciada.
Aquí hay una solución que no requiere cambiar el archivo de objetivos. La solución alternativa de http://connect.microsoft.com/VisualStudio/feedback/details/786492/publish-cant-find-the-valid-aspnetmergepath sugiere pasar elementos adicionales a msbuild. Pude hacerlo funcionar usando esto:
msbuild website.publishproj / p: DeployOnBuild = true / p: PublishProfile = Release /p:VisualStudioVersion=12.0 / p: AspnetMergePath = "C: / Archivos de programa (x86) / Microsoft SDKs / Windows / v8.1A / bin / NETFX 4.5 .1 Herramientas / "
La clave aquí es la propiedad AspnetMergePath
, que es posible que deba cambiar si Windows SDK está instalado en una ubicación diferente. Si GetAspNetMergePath
propiedad GetAspNetMergePath
de la solución, falla, pero eso puede ser necesario dependiendo de la versión del SDK.
En mi caso faltaba. Ocurrió después de actualizar Visual Studio 2017 a 15.7.5. Antes de eso funcionaba bien. Tengo que añadir
<TargetFrameworkSDKToolsDirectory>C:/Program Files (x86)/Microsoft SDKs/Windows/v8.1A/bin/NETFX 4.5.1 Tools/</TargetFrameworkSDKToolsDirectory>
Estaba en la línea 129 en Microsoft.Web.Publishing.AspNetCompileMerge.targets
Lo que necesita es aspnet_merge.exe, herramienta que se distribuye como parte de Windows SDK. Está pensado para precompilar sitios, por lo que puede desactivar esa precompilación o instalar la versión adecuada de Windows SDK . La referencia es a la Wikipedia, debido a los buenos enlaces preparados a las páginas de descarga. No necesita descargar / instalar todo (es enorme), solo descargue el instalador web y seleccione las herramientas .Net, tomará alrededor de 50 megabytes.
Tenga en cuenta que se incluye con la versión de Visual Studio 2010 Windows SDK. 7.0A no está disponible para la descarga por separado, por lo que deberá instalar Visual Studio en su servidor de compilación o modificar algo como se describe en las respuestas de "La ejecución de MSBuild no puede leer SDKToolsPath ".
Me topé con el mismo problema. Busqué en todos los sitios relacionados con microsoft, encontré muchas quejas y ninguna intención de microsoft para solucionarlo.
Aquí cómo lo trabajé alrededor de mi sistema. Edite el archivo Microsoft.Web.Publishing.AspNetConfigurationMerge.targets
y agregue la siguiente línea. Asegúrese de que la ruta del SDK de Microsoft sea la misma en su PC, si no es así, cámbiela:
<TargetFrameworkSDKToolsDirectory>C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Bin/</TargetFrameworkSDKToolsDirectory>
Aquí es cómo debe verse:
<Target
Name="GetAspNetMergePath"
DependsOnTargets="$(GetAspNetMergePathDependsOn)"
Condition ="''$(GetAspNetMergePath)'' != ''false''">
<PropertyGroup>
<TargetFrameworkSDKToolsDirectory>C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Bin/</TargetFrameworkSDKToolsDirectory>
<AspnetMergeName>aspnet_merge.exe</AspnetMergeName>
<AspnetMergePath Condition="Exists(''$(TargetFrameworkSDKToolsDirectory)$(AspnetMergeName)'')">$(TargetFrameworkSDKToolsDirectory)</AspnetMergePath>
</PropertyGroup>
<Error Condition="''$(AspnetMergePath)'' == '''' Or !Exists($(AspnetMergePath))"
Text="Can''t find the valid AspnetMergePath" />
Me topé con el mismo problema.
Edite el archivo Microsoft.Web.Publishing.AspNetConfigurationMerge.targets y agregue la siguiente línea. Asegúrese de ejecutar el editor con derechos de administrador.
Parece la versión correcta de Visual Studio en mi caso VS2013.
x64
<TargetFrameworkSDKToolsDirectory>C:/Program Files (x86)/Microsoft SDKs/Windows/v8.0A/bin/NETFX 4.0 Tools/</TargetFrameworkSDKToolsDirectory>
x86
<TargetFrameworkSDKToolsDirectory>C:/Program Files/Microsoft SDKs/Windows/v8.0A/bin/NETFX 4.0 Tools/</TargetFrameworkSDKToolsDirectory>
¡Y funciona! Puedo compilar mi proyecto.
Una solución alternativa para todas estas cosas [incluida la necesidad de instalar el SDK, etc.] es deshabilitar la opción de precompilación en publicación, que requiere que AspNetMerge esté presente incluso si no está especificando que desea que las cosas se combinen en el resultado final .
Me esforzaba mucho para averiguar cómo apagarlo, examinando detenidamente el cuadro de diálogo de opciones y Leyendo el Manual Amistoso para confirmar que lo había apagado por años solo para darme cuenta de que era la casilla de verificación que estaba afuera:
Al desmarcar, se producen los siguientes cambios en el .pubxml
:
- <PrecompileBeforePublish>True</PrecompileBeforePublish>
- <EnableUpdateable>True</EnableUpdateable>
- <DebugSymbols>False</DebugSymbols>
- <WDPMergeOption>DonotMerge</WDPMergeOption>
Lo que funcionó para mí.
NB, sin embargo, es crítico tener como se trata aquí tanto la Web
(que hará silenciosamente la publicación a través de /p:DeployOnBuild
) como las WebApplications
(que darán un error de compilación) las subcarpetas presentes en %Program Files (x86)%/MSBuild/Microsoft/VisualStudio/v14.0
(asumiendo las herramientas de Visual Studio 2015) para publicación para generar paquetes con éxito