2012-10-23 233 views
1

當我想要使用異步CTP關鍵字時遇到問題。所有開發人員機器都是VS2010,因此需要安裝異步CTP--已經完成並且已使用這些功能編寫代碼。但是,當我提交此代碼時,我意識到我們的構建服務器安裝了VS2012(因此安裝了.NET 4.5),因爲另一個團隊需要C++ 11功能並共享此資源。在同一解決方案中VS2010異步CTP和VS2012異步目標包

這意味着連續構建服務器會失敗我們的C#構建,因爲它們現在針對.NET 4.0(我們仍然擁有WinXP用戶機器),並使用異步方法以及啓用這些新關鍵字的CTP方法。通過在這些項目中安裝異步定位包,我會得到其他編譯錯誤(相同類定義了兩次,一次在CTP中,一次在異步定位包中)。

有沒有辦法讓這兩種方法在一起很好地玩?顯然,我們完全打算讓所有的開發人員儘快在VS2012上工作 - 更不用說讓我們的用戶在.NET 4.5上運行起來,但這超出了問題的範圍。

我有一個解決方案,我已經在下面回答,但將不勝感激任何反饋。

回答

1

我寧願推薦更新開發機器VS2012比針對兩個真正不同的庫 - AsyncCTP和Async Targeting Pack。這些不是簡單的可互換的,它們的實現方式不同,它可能發生,你的代碼將與AsyncCTP協同工作,而不是ATP協議。

將本地異步/等待支持更新到.NET 4.5可能是最好的解決方案。

0

本人對上述問題的解決方案是在我所有的「異步啓動」的.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標誌「/ P:BuiltOnNet45 =真」的時候我使用我們的VS2012構建機構建 - 並在使用我們的開發機器時保持關閉狀態。因爲blank是默認值,所以這個解決方案允許我們在VS2010中加載和使用這些解決方案,而不會出現問題。如果我要使用VS2012 IDE,我將不得不調整這一點,但我不需要這樣做。