2012-08-30 10 views
5

Escribí un pequeño script de MSBuild para construir mi proyecto en múltiples versiones. Cuando lo ejecuto desde VS2012 Command Prompt funciona, no obtengo ningún error o excepción. Sin embargo, cuando comparo los conjuntos producidos, son idénticos. ¿Hay algo mal en mi script?¿Funciona correctamente mi secuencia de comandos de compilación para orientar varios marcos de destino?

<Target Name="Build"> 

    <MSBuild Projects=".\WcfClientBase\WcfClientBase.csproj" 
      Properties="Configuration=Release;OutputPath=.\BuildArtifacts\net45;TargetFrameworkVersion=v4.5" /> 

    <MSBuild Projects=".\WcfClientBase\WcfClientBase.csproj" 
      Properties="Configuration=Release;OutputPath=.\BuildArtifacts\net40;TargetFrameworkVersion=v4.0" /> 

    <MSBuild Projects=".\WcfClientBase\WcfClientBase.csproj" 
      Properties="Configuration=Release;OutputPath=.\BuildArtifacts\net35;TargetFrameworkVersion=v3.5" /> 

</Target> 

Tengo VS2012 Professional instalado. También noté que .NET 4.5 no tiene su propio MSBuild.exe. ¿Está usando el de la versión 4.0?

actualización

construí con Visual Studio para cada versión y todos los conjuntos son diferentes. Hay algo mal con mi script Deludí erróneamente el nombre del parámetro TargetFrameworkVersion pero todavía se creó y produjo los mismos resultados. Tal vez no pueda anular ese parámetro del archivo de proyecto o me faltan otros parámetros. ¿Alguna idea más?

+0

Solo uso ILMerge para cambiar un ejecutable .NET 2 a .NET 4; p Recuerde, el punto de entrada dicta la versión de tiempo de ejecución. En mi caso, todos los ensamblados se construyen teniendo como objetivo .NET 2 y utilizando AnyCPU. Luego uso ILMerge y corflags para generar un conjunto de 4 ejecutables para la versión .NET y las combinaciones de bits. Funciona con encanto (en mi caso específicamente para usar ngen en las 4 configuraciones). – leppie

+0

¿Cómo estás haciendo tu comparación? ¿Estás comparando byte por byte? –

+0

@splatteredbits sí –

Respuesta

4

También es necesario personalizar la propiedad IntermediateOutputPath, de lo contrario los 3 sabores comparten el mismo directorio intermedio obj\Release. Pruebe esto:

<Target Name="Build"> 
    <MSBuild Projects="WcfClientBase\WcfClientBase.csproj" 
     Properties="Configuration=Release;OutputPath=BuildArtifacts\net45\;IntermediateOutputPath=obj\Release\net45\;TargetFrameworkVersion=v4.5" /> 
    <MSBuild Projects="WcfClientBase\WcfClientBase.csproj" 
     Properties="Configuration=Release;OutputPath=BuildArtifacts\net40\;IntermediateOutputPath=obj\Release\net40\;TargetFrameworkVersion=v4.0" /> 
    <MSBuild Projects="WcfClientBase\WcfClientBase.csproj" 
     Properties="Configuration=Release;OutputPath=BuildArtifacts\net35\;IntermediateOutputPath=obj\Release\net35\;TargetFrameworkVersion=v3.5" /> 
</Target> 
+0

No ayudó. Los ensambles son aún idénticos. –

+1

@Ufuk, compare 3.5 binarios con 4.0. Ellos serán diferentes. Una forma de comparar es abrir el binario en 'ildasm' y verificar qué versión de mscorlib está vinculada en los metadatos del ensamblado. –

+0

Revisa mi actualización por favor. –

Cuestiones relacionadas