1

非同期CTPキーワードを使用したいときに、ここで問題が発生しました。すべての開発者マシンはVS2010であるため、非同期CTPをインストールする必要があります。これは実行され、これらの機能を使用してコードが記述されています。ただし、このコードをコミットするようになったとき、別のチームがC ++ 11機能を必要とし、このリソースを共有しているため、ビルドサーバーにVS2012(したがって.NET 4.5)がインストールされていることに気付きました。

これは、継続的ビルドサーバーがC#ビルドに失敗することを意味します。これは、非同期メソッドとこれらの新しいキーワードを有効にするCTPメソッドを使用して.NET 4.0(WinXPユーザーマシンがまだあります)をターゲットにしているためです。これらのプロジェクトに非同期ターゲティングパックをインストールすると、他のコンパイルエラーが発生します(同じクラスが2回定義されています。1回はCTPで、もう1回は非同期ターゲティングパックで定義されています)。

とにかく、これらの方法の両方をうまく一緒にプレイさせることはありますか?明らかに、私たちはすべての開発者がすぐにVS2012に取り組むことを完全に意図しています。もちろん、ユーザーを.NET 4.5で稼働させることは言うまでもありませんが、これは質問の範囲を超えています。

私は以下に答えた解決策を持っていますが、フィードバックをいただければ幸いです。

4

2 に答える 2

1

まったく異なる 2 つのライブラリ (AsyncCTP と Async Targeting Pack) に対してビルドするよりも、開発マシンを VS2012 に更新することをお勧めします。これらは単純に交換可能ではなく、実装が異なるため、コードが ATP ではなく AsyncCTP で動作する可能性があります。

ここでは、ネイティブの async/await サポートを使用してプロジェクトを .NET 4.5 に更新することが最善の解決策になる可能性があります。

于 2012-10-24T09:11:01.870 に答える
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>

次に、VS2012ビルドマシンを使用してビルドする場合はmsbuild.exeフラグ "/ p:BuiltOnNet45 = true"を使用し、開発マシンを使用する場合はオフのままにします。空白がデフォルト値であるため、このソリューションを使用すると、VS2010のソリューションを問題なくロードして使用できます。VS2012 IDEも使用する場合は、これを微調整する必要がありますが、これは必要ありません。

于 2012-10-23T09:05:36.640 に答える