2012-08-30 7 views
5

私は、複数のバージョンで自分のプロジェクトをビルドするための小さなMSBuildスクリプトを書いています。 VS2012コマンドプロンプトから実行すると、エラーや例外は発生しません。しかし、私が生成したアセンブリを比較すると、それらは同じです。スクリプトに何か問題がありますか?複数のターゲットフレームワークを正しくターゲット設定するビルドスクリプトは正しく動作していますか?

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

VS2012 Professionalがインストールされています。私はまた、.NET 4.5には独自のMSBuild.exeがないことに気付きました。バージョン4.0のものを使用していますか?

更新

私は、各バージョンのVisual Studioでそれを構築し、すべてのアセンブリは異なっています。私のスクリプトには何か問題があります。私は故意にTargetFrameworkVersionパラメータ名を間違って入力しましたが、同じ出力を作成して生成しました。おそらく、プロジェクトファイルからそのパラメータを上書きすることができないか、私が紛失している他のパラメータがあります。これ以上のアイデアは?

+0

:これを試してみてください。私の場合、すべてのアセンブリは、.NET 2とAnyCPUを使用して構築されています。次に、ILMergeとcorflagsを使用して、.NETバージョンとビット数の組み合わせのための4つの実行可能ファイルのセットを生成します。魅力を発揮します(私の場合は、4つの設定すべてでngenを使用するために特別です)。 – leppie

+0

どうやって比較していますか?あなたはbyte-for-byteを比較していますか? –

+0

@splatteredbits yes –

答えて

4

また、IntermediateOutputPathプロパティをカスタマイズする必要があります。そうでない場合は、3つすべてのフレーバが同じ中間ディレクトリobj\Releaseを共有します。 pは、エントリポイントは、ランタイムバージョンを指示、注意してください。私は、.NET 4に.NET 2実行可能ファイルを変更するILMergeを使用

<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

役に立たなかったアセンブリはまだ同じです。 –

+1

@Ufuk、4.0と3.5バイナリを比較してください。彼らは違うでしょう。比較する1つの方法は、 'ildasm'でバイナリを開き、アセンブリメタデータにリンクされているmscorlibのバージョンを確認することです。 –

+0

更新をご確認ください。 –

関連する問題