2011-01-23 6 views
32

¿Cómo se genera un valor de variable en el registro de MSBuild?Cómo generar un valor de variable en el registro de MSBuild

Estoy intentando depurar una secuencia de comandos de MSBuild y me gustaría generar un valor de variables para el registro.

+0

creo que esta pregunta puede ayudar a resolver su problema. http://stackoverflow.com/questions/2968077/trouble-with-outputting-msbuild-variables – awright18

Respuesta

55

En realidad, puede debug msbuild guiones con VS2010 ahora. Requiere algo de piratería y no es oficialmente compatible, pero es una opción.

De lo contrario, utilice la tarea Message. Se aplican las reglas normales para hacer referencia a Properties, Items y Item Metadata (también conocido como batching).

Este ejemplo:

<Project DefaultTargets="Build" 
     xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemGroup> 
    <TestItem Include="test1" /> 
    <TestItem Include="test2" /> 
    <TestItem Include="test3" /> 
    </ItemGroup> 
    <PropertyGroup> 
    <TestProperty>Property Value</TestProperty> 
    </PropertyGroup> 

    <Target Name="TestMessage" AfterTargets="Build" > 
    <!--Use $(Property Name) to reference a property--> 
    <Message Text="$(TestProperty)" Importance="high"/> 
    <!--Use @(Item Name) to output a semi-colon separated list of items on one line--> 
    <Message Text="@(TestItem)" Importance="high"/> 
    <!--Use %(Item Name.Metadata Property Name) to call the Message task once for each item.--> 
    <!--This will output each item on a separate line--> 
    <Message Text="%(TestItem.Identity)" Importance="high"/> 
    </Target> 
</Project> 

producirá esta salida:

Property Value 
test1;test2;test3 
test1 
test2 
test3 
+3

Para que su respuesta sea más fácil de usar, considere agregar Importancia = atributo "alto" a cada uno de los elementos del Mensaje. De esta forma, los mensajes se mostrarán de manera predeterminada cuando llame a msbuild o si busca en la salida de compilación en VS –

+3

. También, para conectar esto rápidamente, puede agregar el objetivo que acaba de definir en un csproj existente y agregar un BeforeTargets = "Construir" para el objetivo. Luego solo compila con VS y busca en la salida de compilación. –

+2

La salida se mostrará exactamente donde? En la ventana de resultados de Visual Studio (y "Mostrar salida desde: compilación")? Además, ¿en qué archivo estoy poniendo esto? Acabo de intentar anexar esto al archivo 'C: \ Archivos de programa (x86) \ Microsoft Visual Studio \ 2017 \ Enterprise \ MSBuild \ 15.0 \ Bin \ Microsoft.Common.CurrentVersion.targets', pero no veo nada en el salida. – jbyrd

Cuestiones relacionadas