2012-08-30 4 views
5

Ho scritto un piccolo script MSBuild per creare il mio progetto su più versioni. Quando lo eseguo da VS2012 Prompt dei comandi funziona, non ricevo errori o eccezioni. Tuttavia, quando paragono gli assembly prodotti, sono identici. C'è qualcosa di sbagliato nel mio script?Il mio script di build per il targeting di più framework di destinazione funziona correttamente?

<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> 

Ho installato VS2012 Professional. Ho anche notato che .NET 4.5 non ha il suo MSBuild.exe. Sta usando quello della versione 4.0?

Aggiornamento

ho costruito con Visual Studio per ogni versione e tutti i gruppi sono diversi. C'è qualcosa di sbagliato nel mio script. Ho digitato in modo intenzionale il nome del parametro TargetFrameworkVersion, ma ha comunque creato e prodotto gli stessi output. Forse non è in grado di sovrascrivere quel parametro dal file di progetto o ci sono altri parametri che mi mancano. Altre idee?

+0

Ho appena utilizzato ILMerge per modificare un eseguibile .NET 2 in .NET 4; p Ricordare che il punto di ingresso determina la versione runtime. Nel mio caso, tutti gli assembly sono costruiti con il targeting su .NET 2 e utilizzando AnyCPU. Quindi utilizzo ILMerge e corflags per generare un set di 4 file eseguibili per le versioni .NET e bitness. Funziona un fascino (nel mio caso specifico per l'utilizzo di ngen su tutte e 4 le configurazioni). – leppie

+0

Come stai facendo il tuo confronto? Stai confrontando byte per byte? –

+0

@splatteredbits yes –

risposta

4

È inoltre necessario personalizzare la proprietà IntermediateOutputPath, altrimenti tutti i 3 sapori condividono la stessa directory intermedia obj\Release. Prova:

<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

Non ha aiutato. Le assemblee sono ancora identiche. –

+1

@Ufuk, confronta 3.5 binari con 4.0. Saranno diversi. Un modo per confrontare è aprire il file binario in 'ildasm' e verificare quale versione di mscorlib è collegata nei metadati di assembly. –

+0

Controlla il mio aggiornamento per favore. –