我的构建脚本是否针对多个目标框架正常工作?

时间:2012-08-30 22:13:48

标签: .net visual-studio msbuild visual-studio-2012 .net-4.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参数名称,但它仍然构建并生成相同的输出。也许它无法从项目文件中覆盖该参数,或者我还缺少其他参数。还有更多想法吗?

1 个答案:

答案 0 :(得分:4)

您还需要自定义IntermediateOutputPath属性,否则所有3种风格共享相同的中间目录obj\Release。试试这个:

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