VS2010异步CTP和VS2012在同一解决方案中的靶向包



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

这意味着连续构建服务器将失败我们的C#构建,因为它们现在针对.NET 4.0(我们仍然具有WinXP用户计算机),并使用异步方法加上CTP方法以及启用这些新关键字的CTP方法。通过将异步定位包安装到这些项目中,我会发现其他汇编错误(同一类定义了两次,一次进入CTP,一次进入异步定位包)。

无论如何,这两种方法都可以很好地播放吗?显然,我们完全打算让所有开发人员尽快在VS2012上工作 - 更不用说让我们的用户使用.NET 4.5来运行,但这超出了问题的范围。

我有一个解决方案,我在下面回答,但要感谢任何反馈。

我宁愿建议将开发机更新为VS2012,而不是针对两个真正不同的库-YNCCTP和异步定位包进行构建。这些不仅是可互换的,还可以用不同的方式实施,并且可能发生,您的代码将与ASYNCCTP一起使用,而不是在ATP中使用。

将您的项目更新为.NET 4.5,并提供本机异步/等待支持的支持可能是这里的最佳解决方案。

我对上述问题的解决方案是在我所有"启用异步"中使用条件引用。CSPROJ文件:

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

i然后使用msbuild.exe标志"/p:builtonnet45 = true"当我使用VS2012构建机器构建时 - 并在使用Dev Machines时将其放下。由于空白是默认值,因此该解决方案允许我们加载和使用VS2010中的解决方案而无需问题。如果我也使用VS2012 IDE,我将不得不调整此问题,但我不需要此。

最新更新