2012-08-30 7 views
5

Napisałem mały skrypt MSBuild do zbudowania mojego projektu na wielu wersjach. Po uruchomieniu go z wiersza polecenia programu VS2012 działa, nie otrzymuję żadnych błędów ani wyjątków. Jednak kiedy porównuję produkowane zespoły, są one identyczne. Czy coś jest nie tak w moim scenariuszu?Czy mój skrypt kompilacji służący do kierowania na wiele struktur docelowych działa poprawnie?

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

Mam zainstalowany VS2012 Professional. Zauważyłem także, że .NET 4.5 nie ma własnego pliku MSBuild.exe. Czy używa się wersji z wersji 4.0?

Aktualizacja

Zbudowałem go z Visual Studio dla każdej wersji i wszystkie zespoły są różne. Coś jest nie tak z moim scenariuszem. Celowo pomyłkowo wprowadziłem nazwę parametru TargetFrameworkVersion, ale wciąż budowałem i produkowałem te same wyjścia. Być może nie jest w stanie zastąpić tego parametru z pliku projektu lub są inne parametry, których mi brakuje. Więcej pomysłów?

+0

wystarczy użyć ILMerge zmienić NET 2 wykonywalny do .NET 4; p Pamiętaj, że punkt wejścia dyktuje wersji wykonania. W moim przypadku wszystkie zespoły są wbudowane w system .NET 2 i używają AnyCPU. Następnie używam ILMerge i corflags do wygenerowania zestawu 4 plików wykonywalnych dla wersji .NET i kombinacji bitness. Działa uroku (w moim przypadku specjalnie dla ngen na wszystkich 4 tych konfiguracjach). – leppie

+0

Jak się masz porównanie? Czy porównujesz bajt-by-bajt? –

+0

@splatteredbits yes –

Odpowiedz

4

Należy również dostosować właściwość IntermediateOutputPath, w przeciwnym razie wszystkie 3 smaki będą miały ten sam pośredni katalog obj\Release. Spróbuj tego:

<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

Nie pomogło. Zespoły są nadal identyczne. –

+1

@Ufuk, porównaj plik 3.5 z wersją 4.0. Będą różne. Jednym ze sposobów porównania jest otwarcie pliku binarnego w 'ildasm' i sprawdzenie, która wersja mscorlib jest połączona w metadanych zestawu. –

+0

Proszę sprawdzić moją aktualizację. –

Powiązane problemy