visual update the studio run net mvc migrations first enable data create code asp asp.net asp.net-mvc tfsbuild

update - ASP.NET MVC 1.0 AfterBuilding Views falla en TFS Build



enable migrations visual studio 2017 (9)

Actualicé ASP.NET MVC Beta a 1.0 e hice los siguientes cambios en el proyecto MVC (como se describe en las notas de la versión RC):

<Project ...> ... <MvcBuildViews>true</MvcBuildViews> ... <Target Name="AfterBuild" Condition="''$(MvcBuildViews)''==''true''"> <AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)/../$(ProjectName)" /> </Target> ... </Project>

Si bien la compilación funciona bien en nuestras cajas de desarrollo local, falla en TFS 2008 Build con "No se pudo cargar el tipo ''xxx.MvcApplication''", ver debajo del registro de compilación:

... using "AspNetCompiler" task from assembly "Microsoft.Build.Tasks.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a". Task "AspNetCompiler" Command: C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/aspnet_compiler.exe -v temp -p D:/Builds/xxx/Continuous/TeamBuild/Sources/UI/xxx.UI.Dashboard//../xxx.UI.Dashboard The "AspNetCompiler" task is using "aspnet_compiler.exe" from "C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/aspnet_compiler.exe". Utility to precompile an ASP.NET application Copyright (C) Microsoft Corporation. All rights reserved. /temp/global.asax(1): error ASPPARSE: Could not load type ''xxx.UI.Dashboard.MvcApplication''. The command exited with code 1. Done executing task "AspNetCompiler" -- FAILED. ...

MVC 1.0 está instalado en TFS y la solución se compila cuando se genera dentro de una instancia de Visual Studio en el mismo servidor TFS.

¿Cómo puedo resolver este problema de compilación de TFS?


El problema radica en el hecho de que la tarea AspNetCompiler MSBuild utilizada dentro del objetivo AfterBuild de un proyecto ASP.NET MVC espera hacer referencia a los dll en la carpeta bin del proyecto web.

En una compilación de escritorio, la carpeta bin está donde lo esperaría en su árbol fuente.

Sin embargo, TFS Teambuild compila el resultado de su fuente en un directorio diferente en el servidor de compilación. Cuando se inicia la tarea AspNetCompiler, no puede encontrar el directorio bin para hacer referencia a la DLL requerida y se obtiene la excepción.

La solución es modificar el objetivo AfterBuild del proyecto MVC para que sea el siguiente:

<Target Name="AfterBuild" Condition="''$(MvcBuildViews)''==''true''"> <AspNetCompiler Condition="''$(IsDesktopBuild)'' != ''false''" VirtualPath="temp" PhysicalPath="$(ProjectDir)/../$(ProjectName)" /> <AspNetCompiler Condition="''$(IsDesktopBuild)'' == ''false''" VirtualPath="temp" PhysicalPath="$(PublishDir)/_PublishedWebsites/$(ProjectName)" /> </Target>

Este cambio le permite compilar Vistas tanto en el escritorio como en el servidor de compilación TFS.


En realidad, hay una mejor solución para este problema. Lo probé con VS / TFS 2010 pero también debería funcionar con VS / TFS 2008.

<Target Name="AfterBuild" Condition="''$(MvcBuildViews)''==''true''"> <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" /> </Target>

Voy a trabajar con el equipo de MVC para actualizar su plantilla de proyecto para utilizar este enfoque junto con un objetivo personalizado (en lugar de anular AfterBuild).

Publiqué una publicación de blog sobre Cómo activar la verificación de la vista en tiempo de compilación para proyectos ASP.NET MVC en TFS Build 2010 .



La respuesta aceptada no funcionó para mí. El parámetro $ (PublishDir) no apuntó a la ubicación correcta. En cambio, tuve que usar:

<Target Name="AfterBuild" Condition="''$(MvcBuildViews)''==''true''"> <AspNetCompiler Condition="''$(IsDesktopBuild)'' != ''false''" VirtualPath="temp" PhysicalPath="$(ProjectDir)/../$(ProjectName)" /> <AspNetCompiler Condition="''$(IsDesktopBuild)'' == ''false''" VirtualPath="temp" PhysicalPath="$(OutDir)/_PublishedWebsites/$(ProjectName)" /> </Target>


La solución de Jim Lamb no funcionó para nosotros cuando construí nuestra web .csproj con

/p:UseWPP_CopyWebApplication=true;PipelineDependsOnBuild=False

porque el objetivo se estaba ejecutando AfterBuild y aún no se ha copiado la aplicación en el WebProjectOutputDir . (Por cierto, paso esas propiedades a la construcción del proyecto web porque quiero que la compilación cree una carpeta OutDir con solo mis archivos binarios y cshtml adecuados para comprimir, es decir, no una compilación en contexto)

Para evitar este problema y cumplir la intención de su objetivo original, hice lo siguiente:

<PropertyGroup> <OnAfter_WPPCopyWebApplication> MvcBuildViews; </OnAfter_WPPCopyWebApplication> </PropertyGroup> <Target Name="MvcBuildViews" Condition="''$(MvcBuildViews)''==''true''"> <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" /> </Target>


No puede precompilar una aplicación ASP.NET MVC.


Supongo que querías decir que cambiaste la siguiente configuración en el archivo .csproj:

<MvcBuildViews>true</MvcBuildViews>

La configuración que publicaste en tu pregunta no debe tocarse. Si funciona en su máquina local, obviamente puede precompilar una aplicación ASP.NET MVC.

Creo que debes rastrear qué es diferente entre tu entorno de construcción TFS y tus máquinas VS locales. Tal vez esté usando una versión diferente de MsBuild o algo así.

Intente realizar ambas compilaciones con salida detallada y compare las dos para ver qué es diferente.


Tenía algunas carpetas antiguas en mi control de fuente que no estaban visibles en la Solución.


Todavía estamos probando esto, pero parece que puede mover el falso / verdadero del conjunto de etiquetas, al grupo de propiedades para su versión de compilación DEBUG, aún puede establecerlo en verdadero y MSBuild compilará (asumiendo MSBuild TfsBuild.proj el archivo está configurado para usar algo que no sea la configuración de depuración). Deberá editar el archivo csproj con el Bloc de notas para lograrlo.

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5"> <PropertyGroup> <Configuration Condition=" ''$(Configuration)'' == '''' ">Debug</Configuration> <MvcBuildViews>true</MvcBuildViews> ....

Debe mover la etiqueta MVCBuildViews del grupo de propiedades predeterminado anterior al grupo de propiedades de configuración de depuración (a continuación). De nuevo, cuando obtengamos la configuración de TFS / MSBuild, intentaré publicar el paso que añadimos a nuestro archivo TFSBuild.proj en TFS.

<PropertyGroup Condition=" ''$(Configuration)|$(Platform)'' == ''Debug|AnyCPU'' "> <MvcBuildViews>true</MvcBuildViews> <DebugSymbols>true</DebugSymbols> ....