2011-02-25 10 views
17

He estado estudiando MSBuild ya que tengo la necesidad de automatizar las compilaciones de mi tienda de desarrollo. Pude escribir fácilmente un archivo .BAT que invoca el símbolo del sistema de VS y le paso mis comandos de MSBuild. Esto funciona bastante bien y es bastante ingenioso.MSBuild - Cómo crear un archivo de solución .NET (en un script de tarea XML) a partir de los comandos de línea de comandos pre-escritos

Aquí es el contenido de mi archivo de generación .BAT:

call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vcvars64.bat" 
cd C:\Sandbox\Solution 
msbuild MyTopSecretApplication.sln /p:OutputPath=c:\TESTMSBUILDOUTPUT /p:Configuration=Release,Platform=x86 
pause 

^Esto funciona bien, pero ahora tengo la necesidad de utilizar la tarea de MSBuild para TeamCity CI. Intenté escribir algunas secuencias de comandos de MSBuild pero no puedo hacer que funcionen de la misma manera. ¿Cuál es el script de construcción equivalente al comando que estoy usando en mi archivo .BAT? ¿Algunas ideas?

He intentado usar algo como esto, pero sin éxito (sé que esto es un error):

<?xml version="1.0"?> 
<project name="Hello Build World" default="run" basedir="."> 

<target name="build"> 
    <mkdir dir="mybin" /> 
    <echo>Made mybin directory!</echo> 

    <csc target="exe" output="c:\TESTMSBUILDOUTPUT"> 
    <sources> 
     <include name="MyTopSecretApplication.sln"/> 
    </sources> 
    </csc> 
    <echo>MyTopSecretApplication.exe was built!</echo> 
</target> 

<target name="clean"> 
    <delete dir="mybin" failonerror="false"/> 
</target> 

<target name="run" depends="build"> 
    <exec program="mybin\MyTopSecretApplication.exe"/> 
</target> 

Lo que simplemente necesita es una escritura de la estructura XML MSBuild que compila una única solución para el modo de lanzamiento a un directorio de salida especificado. ¿Alguna ayuda?

Respuesta

27

Use la tarea MSBuild para crear la solución que le permita pasar las propiedades que necesita.

<?xml version="1.0" encoding="utf-8"?> 
<Project 
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003" 
    ToolsVersion="4.0" 
    DefaultTargets="Build"> 

    <PropertyGroup> 
     <OutputDir>c:\TESTMSBUILDOUTPUT</OutputDir> 
    </PropertyGroup> 

    <ItemGroup> 
     <ProjectToBuild Include="MySecretApplication.sln"> 
      <Properties>OutputPath=$(OutputDir);Configuration=Release</Properties> 
     </ProjectToBuild> 
    </ItemGroup> 

    <Target Name="Build"> 
     <MSBuild Projects="@(ProjectToBuild)"/> 
    </Target> 

</Project> 
+0

Un millón de gracias. Ahora si tengo un proyecto en "MySecretApplication.sln" que quiero excluir, ¿cómo puedo hacer eso? Intenté esto pero no está funcionando ... ¿alguna idea? – D3vtr0n

+3

Debería configurar una configuración de compilación en su solución (haga clic con el botón derecho en el nodo de solución y elija Configuration Manager en Visual Studio). Puede crear una nueva configuración, darle un nombre y seleccionar qué proyectos construir. Esto se almacena en el archivo de solución.En el archivo MSBuild en la respuesta, pase el nuevo nombre de Configuración. Es posible que actualmente tenga una configuración de depuración y liberación que son los nombres estándar. –

+0

Gracias, eso fue perfecto. – D3vtr0n

2

Aquí es mi último guión MSBuild:

<?xml version="1.0" encoding="utf-8"?> 

<PropertyGroup> 
    <OutputDir>C:\TESTMSBUILDOUTPUT</OutputDir> 
</PropertyGroup> 

<ItemGroup> 
    <ProjectToBuild Include="MyTopSecretApplication.sln" > 
     <Properties>OutputPath=$(OutputDir);Configuration=MSBuildRelease;Platform=x86</Properties> 
    </ProjectToBuild> 
</ItemGroup> 

<Target Name="Build"> 
    <MSBuild Projects="@(ProjectToBuild)"/> 
</Target> 

Como se puede ver, la principal diferencia con respecto a la respuesta de Brian Walker es la "configuración" Configuración . Aquí está configurado en "MSBuildRelease" en lugar de "Release", que personalicé desde .NET IDE. Siga los pasos que sugirió Brian (haga clic derecho en el nodo de la solución y elija Configuration Manager en Visual Studio, agregue la configuración "NUEVA" y elimine/desmarque los proyectos que desee excluir.)

He subido esto a mi servidor TEAMCITY, y he automatizado mi proceso de compilación .NET con su ayuda. Muchas gracias a Brian Walker (un compañero tejano) ... ¡¡Te compraré una cerveza !! ¡¡ACLAMACIONES!!

0

Sé que esta no es una respuesta directa a su pregunta, pero ¿por qué no simplemente utilizar el compilador de compilación de Visual Studio incorporado y recoger el resultado compilado de la ruta/obj correspondiente y guardarlo como un artefacto de compilación? Si no está haciendo nada más que una simple compilación contra una configuración de compilación específica, no hay mucho valor agregado al tener un archivo de compilación dedicado y usar artefactos de compilación puede hacer la vida mucho más fácil (usarlos en otras compilaciones, descargarlas). fácilmente, etc.).

Pruebe la configuración descrita aquí, si esto no es hacer sentido: http://www.troyhunt.com/2010/11/you-deploying-it-wrong-teamcity_25.html

+0

Esencialmente, es lo mismo. Muy interesante. La única diferencia que veo es que con mi script de creación XML, puedo usar el parámetro CONFIGURATION, para cambiar mi .SLN orden de compilación No veo cómo hacer eso en Team City usando este enfoque Auto Deploy/.SLN directo? – D3vtr0n

+0

Aún puede pasar esto a través del campo de parámetros de línea de comando. Como la descripción en TeamCity dice "Ingrese parámetros de línea de comando adicionales a MSBuild.exe". ¡Fácil! –

+0

Troy, ¿sabe si este método compilará proyectos web fácilmente? Me está costando crear mis archivos ASMX para su lanzamiento en mis scripts. Necesito convencerme de que esta es una opción viable, que vale la pena investigar, pero me da curiosidad saber si tiene limitaciones para los proyectos web. ¡aclamaciones! – D3vtr0n

Cuestiones relacionadas