26

Microsoft.Bcl.Async プロジェクトでパッケージを使用していますが、このプロジェクトは非同期機能を使用しない別のプロジェクトによって参照されています。

ソリューション(または2番目のプロジェクトのみ)をコンパイルすると、このエラー警告が表示されます。

プライマリ参照「XYZ.dll」は、フレームワークアセンブリ「System.Runtime、Version = 1.5.11.0、Culture = neutral、PublicKeyToken = b03f5f7f11d50a3a」に間接的に依存しているため、解決できませんでした。これは、現在ターゲットになっているものでは解決できませんでした。フレームワーク。「.NETFramework、Version=v4.0」。この問題を解決するには、参照「XYZ.dll」を削除するか、アプリケーションを「System.Runtime、Version = 1.5.11.0、Culture = neutral、PublicKeyToken=b03f5f7f11d50a3a」を含むフレームワークバージョンに再ターゲットします。

私は両方のプロジェクトでこのapp.configを使用します:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:bcl="urn:schemas-microsoft-com:bcl">
      <dependentAssembly bcl:name="System.Runtime">
        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.5.16.0" newVersion="2.5.16.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.5.16.0" newVersion="2.5.16.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

私が間違っているのは何ですか?

非同期パッケージdllを参照したくありません。

.Net4.5ターゲットを使用できません。.Net4である必要があります。

すべてのプロジェクトのターゲットフレームワーク:.NET Framework 4

4

2 に答える 2

23

まとめ

利用可能な回避策がいくつかあります。

  1. Microsoft.Bcl.Asyncパッケージを参照プロジェクトにインストールします。

  2. Microsoft.Bcl.Buildパッケージを参照プロジェクトにインストールします。これには実際の修正が含まれており、ビルド時の依存関係のみです。これを行うときは、プロジェクトの App.Config (上にリストしたものなど) に適切なバインド リダイレクトが必要です。それがクラス ライブラリ、Web プロジェクト、または実行可能ファイルであるかどうかは関係ありません。

  3. どのパッケージにも依存したくない場合は、Microsoft.Bcl.targets ファイル (Microsoft.Bcl.Build でインストール) 内の PropertyGroup 要素の内容を取得し、最後のインポートの後に参照元プロジェクトの最後に挿入します。エレメント。

注:上記のいずれのオプションを選択しても、(古い Microsoft.CompilerServices.AsyncTargetingPack と同様に) Microsoft.Bcl.Async に依存するライブラリを出荷する場合は、それらのバイナリ (System.Runtime、System.Threading. Tasks、Microsoft.Threading.Tasks.*) を、ライブラリを使用するアプリケーション/パッケージと共に使用します。

長い話

Peter が指摘したように、これは Microsoft.Bcl.Async でのみ発生し、Microsoft.CompilerServices.AsyncTargetingPack では発生しない既知の問題です。

Microsoft.Bcl.Async の設計の一部は、新しい .NET 4.5 アセンブリ (System.Runtime、System.Threading.Tasks) を 4.0 で実行できるように (NuGet パッケージ経由で) バックポートすることでした。MSBuild はこれを好まず、参照ライブラリが新しいフレームワーク バージョンのアセンブリに依存していると信じ込ませます。Microsoft.Bcl.Build パッケージの回避策により、これが修正されます。

于 2013-03-21T21:42:37.220 に答える
4

代わりに、Async Targeting Pack for Visual Studio 11 を使用してください。

Install-Package Microsoft.CompilerServices.AsyncTargetingPack

Microsoft.Bcl.Async プレリリースを使用する場合は、すべてのプロジェクトに追加する必要があります。Bcl.Async の次のリリースでは、メッセージングが改善され、詳細が改善されるはずです。

VS 2010 を使用している場合、私が知っている唯一のことは、非同期/待機を提供する AsyncCTP です。したがって、VS 2010 で Microsoft.Bcl.Async を使用しても意味がありません。

アップデート:

Microsoft.Bcl.Async への WRT: MSB 警告に関する問題 (「解決できません...間接的な依存関係...」は既知であり、対処中です。(MSBuild および Microsoft.Bcl.Async への) 将来の更新では、これは次のようになります。Microsoft.Bcl.Async を両方のプロジェクトに含める必要はありません。

于 2013-03-21T16:32:28.263 に答える