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 参数名称,但它仍然构建并产生了相同的输出。也许它无法从项目文件中覆盖该参数,或者我缺少其他参数。还有什么想法吗?

4

1 回答 1

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> 
于 2012-08-31T21:20:19.903 回答