VS2010异步CTP和VS2012异步定位包在同一解决方案中

时间:2012-10-23 09:05:37

标签: .net visual-studio-2012 .net-4.5 async-await async-ctp

我想在使用异步CTP关键字时遇到问题。所有开发人员机器都是VS2010,因此需要安装异步CTP - 这已经完成,代码已经使用这些功能编写。但是,当我提交此代码时,我意识到我们的构建服务器安装了VS2012(因此是.NET 4.5),因为另一个团队需要C ++ 11功能并共享此资源。

这意味着连续构建服务器无法通过我们的C#构建,因为它们现在使用异步方法以及启用这些新关键字的CTP方法来定位.NET 4.0(我们仍然使用WinXP用户计算机)。通过在这些项目中安装异步目标包,我得到了其他编译​​错误(相同的类定义了两次,一次在CTP中,一次在异步目标包中)。

有没有让这两种方法很好地融合在一起?显然,我们完全打算让所有开发人员尽快使用VS2012 - 更不用说让我们的用户使用.NET 4.5了,但这超出了问题的范围。

我有一个解决方案,我在下面已经回答过,但我很感激您的反馈。

2 个答案:

答案 0 :(得分:1)

我宁愿建议将dev机器更新到VS2012而不是构建两个非常不同的库 - AsyncCTP和Async Targeting Pack。这些不是简单的可互换,它们的实现方式不同,可能会发生,您的代码将与AsyncCTP一起使用,而不是在ATP中。

使用本机异步/等待支持将项目更新到.NET 4.5可能是最好的解决方案。

答案 1 :(得分:0)

我对上述问题的解决方案是在我的所有" async enabled"中使用条件参考。 .csproj文件:

<Reference Include="AsyncCtpLibrary" 
  Condition="'$(BuiltOnNet45)'==''">
  <HintPath>..\..\lib\AsyncCtpLibrary.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CompilerServices.AsyncTargetingPack.Net4" Condition="'$(BuiltOnNet45)'=='true'">
  <HintPath>..\..\lib\Microsoft.CompilerServices.AsyncTargetingPack.Net4.dll</HintPath>
</Reference>

然后我使用msbuild.exe标志&#34; / p:BuiltOnNet45 = true&#34;当我使用我们的VS2012构建机器构建时 - 在使用我们的开发机器时将其关闭。由于空白是默认值,因此该解决方案允许我们在没有问题的情况下加载和使用VS2010中的解决方案。如果我也使用VS2012 IDE,我将不得不调整它,但我不需要这个。