2009-05-10 22 views
8

Tengo un interés en msbuild esta semana. Estoy limpiando muchos scripts de compilación extremadamente complejos. Indagar me sorprende con lo mucho que puede hacer: msbuild es una característica oculta de la programación de .NET en sí misma.Funciones ocultas de msbuild

En la convención SO que las preguntas deben tener respuestas, en unos días o una semana, marcaré las características ocultas más útiles o más geniales tal como se aceptaron.

let bestAnswer suprise slick useful = (surprise + slick + 2*useful) 

Definición de utilidad: Estoy actualizar los scripts existentes msbuild que: paquete (archivos zip) sitios web y los servicios públicos, la integración CC.NET, pruebas de lanzamiento (UT + selenio), construir bases de datos. Estoy agregando (nuevos objetivos, incluso más útiles): despliegue en servidores virtuales VMWare, construcciones encadenadas (compilación rápida de forma inmediata, pruebas lentas en cola). Si se refiere a una biblioteca externa (como MSBuild community tasks), sería bueno saber cómo obtenerla.

Algunas sorpresas de msbuild que ya he encontrado.

  • Hola mundo mediante la tarea Message y propiedades.
  • Uso de msbuild como instalador para un producto de servidor extremadamente complejo. MSB community tasks configuró el servidor IIS. Las tareas WriteLinesToFile y XmlUpdate escribieron archivos de configuración específicos del servidor. Si ha trabajado con MSI, sabrá que cualquier cosa es mejor que MSI para la instalación.
  • Para novatos: los archivos CSProj y Vbproj son los mismos que los archivos msbuild "proj". Para editar directamente: descargue su csproj o vbproj, luego haga clic derecho en el proyecto y seleccione editar. Esto es más agradable y más poderoso que trabajar con eventos torpes previos a la compilación/postconstrucción.
  • MSBuild viene con la instalación .NET genérica. A diferencia de otras herramientas sofisticadas, puede usarlo en un servidor/escritorio totalmente limpio.

Aquí es msbuild Hello World Después de lo escribí, me encontré con la MSDN hello world.

<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="Build;Test" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
     <Who>World</Who> 
    </PropertyGroup> 
    <Target Name="Hello"> 
    <Message Text="Hello, $(Who)" Importance="high" ></Message> 
    </Target> 
    <Target Name="Build" DependsOnTargets="Hello"/> 
    <Target Name="Test"/> 
</Project> 
+0

¿Debería ser una wiki comunitaria, ya que es más una discusión que una pregunta? – Naaff

+0

OK. Parece que el resto de las "características ocultas ..." son wiki de la comunidad. – Precipitous

Respuesta

5

MSBuild tiene una serie de características agradables. Me gusta

especificaciones de archivo recursivas

<Files Include="$(src)\**\*.cs" Exclude="$(src)\**\*test.cs" /> 

dosificación y metadatos de los elementos

<ItemGroup> 
<F Include="SampleApplication.t"> 
    <Version>1</Version> 
</F> 
<F Include="SampleApplication2.t"> 
    <Version>1</Version> 
</F> 
<F Include="SampleApplication3.t"> 
    <Version>2</Version> 
</F> 
</ItemGroup> 
<Target Name="Build"> 
<Touch Files="%(F.FullPath)" AlwaysCreate="True" 
     Condition=" '%(F.Version)' > '1' "> 
<Output TaskParameter="TouchedFiles" ItemName="CreatedFiles"/> 
</Touch> 
<Message Text="Created files = @(CreatedFiles)"/> 
<Message Text="%(F.Identity) %(F.Version)"/> 
</Target> 

Objetivo análisis de la dependencia nivel

<Target Name="Build" 
      Inputs="@(MyItems)" 
      Outputs="@(MyItems -> '$(MyItems)\%(filename).dll'"> 
+0

El recursivo ** es un truco que uso para compartir código entre frameworks (CF/Silverlight/.NET/etc) - muy útil. –

0

Puede hacer referencia a un archivo msbuild desde dentro de otra. Todos nuestros objetivos, como los de ejecutar NCover, SourceMonitor, Duplo, etc. se encuentran dentro de un archivo de objetivos comunes. Para cada proyecto, creamos un archivo msbuild con una sección PropertyGroup y ItemGroup, seguido de una inclusión para los objetivos comunes. Esto garantiza que todas nuestras compilaciones ejecutarán el mismo conjunto de tareas de análisis y nos ahorrará tiempo al escribir las secuencias de comandos.

2
  • He encontrado el paquete de MSBuild Extension a ser increíblemente útil . La documentación está muy bien organizada y es fácil encontrar la información que necesita.

  • tienen una sección en la configuración de IntelliSense para ficheros de construcción, que se puede encontrar here

  • Attrice tiene una increíble herramienta que utilizo a menudo si necesito para trabajar en guiones de construcción. Lo que hace que valga la pena probarlo, es que tiene un depurador que le mostrará las tareas dependientes, mientras ejecuta su script de compilación, con las variables auto y watch mientras ejecuta el script de compilación. Microsoft Build Sidekick v2.3

  • Al configurar el SVN en silencio, siento que ha aumentado mucho la velocidad del proceso de compilación. Añadiendo lo siguiente a su MSBuild.Community.Tasks.Subversion.SvnExport se ejecutará la construcción sin necesidad de acceder a todos y cada archivo que se sale de SVN

    Argumentos = "- la fuerza -q"

3

Utilice el parámetro de línea de comandos /M para habilitar el uso de todos los núcleos de CPU disponibles.