Microsoft.WebApplication.targets not found

Creando un build script con psake y configurandolo en un servidor de integración con TeamCity me topé con el siguiente error:

The imported project “C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets” was not found

Dicho archivo .targets corresponde a un set de elementos, propiedades, targets y tareas de escenarios comunies segun se puede ver en la referencia de MSBuild. Estos archivos se instalan con el Visual Studio y/o MSBuild, sin embargo el correspondiente a WebApplication no está incluido.

Buscando si alguien más ha tenido este problema encontré esta nota “TFS 2010 – Solving The Imported Project Microsoft.WebApplication.targets Was Not Found Error

En dicha nota sugieren literalmente copiar el directorio “C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications” de una máquina de desarrollo al build server, acción que que la compilación suceda.

Al volver a ejecutar el build script comencé a obtener varios warnings indicando lo siguiente:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(847,9): warning MSB3644: The reference assemblies for framework “.NETFramework,Version=v4.0″ were not found. To resolve this, install the SDK or Targeting Pack for this framework version or retarget your application to a version of the framework for which you have the SDK or Targeting Pack installed. Note that assemblies will be resolved from the Global Assembly Cache (GAC) and will be used in place of reference assemblies. Therefore your assembly may not be correctly targeted for the framework you intend.

Donde lo que procede es la instalación del SDK para la .NET Framework 4. Ojo, la Framework 4 se encontraba ya instalada en el servidor de integración, mas no el SDK, así que las referencias que utilizamos en nuestra aplicación, según lo indicaban los warnings,  se resolvían con el GAC, sin embargo, nuestro build no está completamente lipio. Una vez realizadas estas acciones tenemos ya nuestro “Build Success!”

Posted in Desarrollo de Software | Tagged , , , , , | Leave a comment

Psake : Herramienta de automatización para nuestros builds.

psake es una herramienta de automatización de Builds escrita en PowerShell. Con similitudes a rake y bake y características de extensibilidad por estar hecho en PowerShell es una buena recomendación para crear nuestras Tareas interdependientes de compilación.

Podemos descargarlo directamente de GitHub y para instalarlo tenemos 2 formas:

Importar el módulo en PowerShell e invocarlo directamente

Esto lo realizamos con las lineas:

Import-Module .\psake.psm1
Invoke-psake .\default.ps1

Debemos estar seguro que la execution policy nos permitirá ejecutar el módulo para ello podemos utilizar el comando de PowerShell

get-executionpolicy

y en caso necesitemos modificarlo, la sugerencia es establecer la policy “remotesigned”

set-executionpolicy remotesigned

Ejecutar el script de PowerShel psake.ps1

# call the psake.ps1 file directly
.\psake.ps1 .\default.ps1

Ejemplo de un script de psake

image

Algunos puntos clave

Posted in Desarrollo de Software | Tagged , , , | Leave a comment

Conceptos claves en Team Foundation Server 2010

Comenzando con mi investigación sobre Team Foundation Server me topé con algunos conceptos claves en un post de bharry, donde menciona  estas características y que resumo a continuación.

Team Project Collections

Cada colleción es un grupo de proyectos relacionados y cada TFS Farm  puede contener varias collecciones.
Cada colección es totalmente independiente una de la otra

Bases de Datos

Por la introducción de los Team Project Collections

TFS_Config

Base de datos raiz que centraliza los datos de la configuración del TFS incluyendo el listado de team project collections.

TFS_Warehouse

Contiene la información de reportes de todas las team project collections, con esto provee la capacidad de reporteria entre todas las team project collections en la TFS farm

TFS_*

Una base de datos por cada team project collection. La cual contiene toda la información operacional relacionada con un sub sitema para determinada team project collection (contol de versiones, seguimiento de ítems en trabajo, builds, etc).

TFS Farms

La introducción de las TFS Farms se considera un gran cambio de arquitectura, permitiendo mayor flexibilidad con relación al TFS 2008. Dichos cambios que dan vida a las TFS Farms son:

  • soporte de NLB entre TFS application tiers. El habilitar balanceo de carga tiene como proposito habilitar una mas limpia y completa historia de alta disponibilidad.
  • Scale out for SQL data tiers. Debido a que cada base de datos es independiente éstas pueden estar en cualquier SQL Server.
Posted in Desarrollo de Software | Tagged | Leave a comment

Incursionando con RavenDB: Crear un Indice y Realizar una Consulta

Luego de instalar y agregar documentos en nuestro RavenDB, continuamos con la interacción llegando ahora a la búsqueda de documentos. Tomando como base el mismo proyecto ejemplo del post Incursionando con RavenDB: Características, instalación y nuestro primer documento… nos vamos a nuestra interfaz web del servidor RavenDB. Anticipadamente agregué algunos documentos extras

image

Antes de Realizar una Consulta vamos a crear un Indice, para ello utilizamos la intefaz web en la opción “indexes”

image

Luego utilizamos la opción “Create New Index”

image

al ver el formulario de creación

image

llenamos estos campos :

image

Por el momento las opciones de “Reduce” y personalización del índice no las utilizaremos.

Una vez creado el índice nos vamos a nuestro proyecto (el mismo del post anterior) y vamos a crear el método de búsqueda

image

Nos concentramos en la sentencia donde le decimos a la sesión que haremos una consulta de clientes sobre el índice “ClientsByName” que creamos previamente en nuestra RavenDB

image

Podemos darnos cuenta que “Query<Client>(string indexName)” es un “IRavenQueryable<Client>” con lo que podemos armar una expresión Linq, por lo que para efectos de prueba tenemos un “FirstOrDefault”

Una vez listo nuestro método lo utilizamos desde nuestra console application:

image

y al ejecutarla tenemos la salida:

image

Y para que puedan probarlo, aca esta el codigo fuente

Posted in Desarrollo de Software | Tagged , , , | Leave a comment

Incursionando con RavenDB: Caracteristicas, instalación y nuestro primer documento

Según lo indica el sitio web de RavenDB es una document database Open Source para la plataforma .Net/Windows. Es una opción almacenamiento de datos  no relacionados dentro del movimiento NoSQL.

Entre sus características tenemos

  • Infraestructura Escalable
  • Configuración en Windows Simple
  • Transaccional
  • Map/Reduce
  • .Net Client API
  • RESTful API
  • Sharding
  • Indexamiento (Lucene syntax)

En cuanto a documentacion parece estar bastante completa (en inglés), podemos consultar:

Antes de comenzar directamente con RavenDB si aún no tenemos en mente lo que una document database es podemos consultar la Wikipedia: Document-oriented database o también ver el video de la VAN de Alt.Net Hispano sobre NoSQL

Cabe mencionar que aún no puede correr en Mono y que los modos Servidor y Embedded corren bajo la framework .NET 4.0. El Cliente si corre (con algunas condiciones) en la framework .NET 3.5 y si puede correr en Mono.

Y para comenzar podemos ir directamente al clásico RavenDB HelloWorld! Tutorial

Según indica el tutorial, luego de descargar el build que decidamos, nos vamos al folder “server” y lo ejecutamos

image

Nota: Para este ejemplo modifiqué la configuración para que corriera en el puerto 8088, por default va a correr en el 8080.

Ahora que ya tenemos el servidor corriendo

image

procedemos a trabajar en una pequeña implementación utilizando el cliente de RavenDB, no olvidemos referenciar el cliente de Raven DB en nuestro proyecto.

Para esta prueba crearé una console application donde tendremos un par de clases que será la definición de nuestro documento:

image

Una vez teniendo nuestros POCO objects, procedemos a inicializar el DocumentStore y utilizarlo, para lo cual tendremos una clase más con un field que será el storage inicializado en el constructor y un método que se encargará de llenar el documento y almacenarlo en el storage.

Ahhh, no olvidemos que el inicializar el storage no es el único paso que debemos realizar. Para poder interactuar con los documentos necesitamos una sesión abierta, aquí el código:

image

Finalmente, utilizamos nuestro ClientsDirectory en una console application

image

y al ejecutar nuestra aplicación y luego irnos a la interfaz web de nuestro RavenDB Server

http://localhost:8088

Podemos ir a la sección “Documents” y bingo!

image

Nuestro primer documento creado, mismo que al darle click en la interfaz web podemos manipularlo:

image

No olvidemos que tenemos la opción de utilizar RavenDB embebido en nuestras aplicaciones lo cual nos quita la dependencia a un servicio adicional a nuestra aplicación que esté corriendo, adicionalmente que esto nos da libertad de utilizarla para muchos tipos de proyectos, no dejen de ver la sección Raven’s Client API

El proyecto puede descargarse Aquí

Posted in Desarrollo de Software | Tagged , , , | 1 Comment