2017-06-25 3 views
0

クラスライブラリプロジェクトを、Nugetパッケージを含む.Netstandard1.4に移行しました。System.Net.Http "Version =" 4.3.2 "クラスライブラリをNetStandard1.4に移行すると、Nunitテストの実行中に例外が発生する

のXML .cprojを以下に記載する:(NUnitのバージョン2.4.6を使用して)

<Project Sdk="Microsoft.NET.Sdk"> 
     <PropertyGroup> 
     <TargetFramework>netstandard1.4</TargetFramework> 
     </PropertyGroup> 


     <ItemGroup>   
     <PackageReference Include="System.Net.Http" Version="4.3.2" />     
     </ItemGroup> 
    </Project> 

マイユニットテストは、依然として(マイグレーションなし)クラスライブラリプロジェクト(.NET 4.6.1)であり、基準myStandard1 .4ライブラリとそれが正常にコンパイルされました。

私はResharpで2017を使用していますエル。私はユニットテストを実行しようとすると、例外が発射される

:それはその「System.Net.Http、バージョン= 4.1.1.1」でないバージョン「4.3.2」と言う

System.IO.FileNotFoundException : Could not load file or assembly 'System.Net.Http, Version=4.1.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. 

ノートNetStandard 1.4ライブラリで使用します。

私はnet461を追加することにより、マルチターゲットをサポートするために.NetStandardプロジェクトを変更する必要がありましたし、例外が消失し、正常に動作:

<TargetFrameworks>netstandard1.4;net461</TargetFrameworks> 

私の質問:

Q1:例外はを要求する理由"System.Net.Http、Version = 4.1.1.1" NetStandard1.4で使用するバージョン "4.3.2"はありませんか?

Q2:なぜマルチターゲットnet461を追加すると、問題が解決しましたか?.NET platforms support for .netstandard1.4 support net461?

質問3:ユニットテストクラスライブラリプロジェクトを他のタイプに移行する必要がありますか?このタイプは何ですか?

答えて

1
  1. NuGetパッケージのバージョンは、含まれているdllファイルのアセンブリバージョンから独立しています。アセンブリは、.NET Frameworkに存在するアセンブリと幾分互換性のある方法でバージョニングされています。

  2. System.Net.Httpには、.netフレームワークの置換実装が含まれています。ライブラリ内のnet461をターゲットにすると、出力には適切なSystem.Net.Httpライブラリが含まれます。 .NET Standard TFMをターゲットにする場合、ライブラリはターゲットに存在するはずです。

  3. System.Net.Http NuGetパッケージをコンシューマプロジェクトにインストールすることで問題を解決できます。 「新しいスタイルの」csprojは、NuGetリファレンスを推移的に取り上げていました。

注バインディングリダイレクトが必要となるライブラリを消費するが、これが唯一の瞬間に新しいスタイルのcsprojのテストプロジェクトに影響を与え、今後のテストプラットフォームのリリースで修正される予定際にも問題があるかもしれないこと:Interface in .NETStandard 1.1 library does not have implementation in .NET 4.61

+0

System.Net.Httpを手動でインストールしましたが、ロジックではない別のアセンブリを別にインストールする必要があります。また、あなたの参照に記載されているようにPropertyGroupを追加しましたが、生成された.dll.configはありません。 NetStandardのアセンブリはプロジェクトでは表示されないようです。これらのアセンブリはどこにありますか?プロジェクトでどのように見えるか? –

+0

「NETStandard.Library」バージョン1.6をインストールすることもできます。1を使用するか、プロジェクトを使用してpackages.configの代わりにNuGetパッケージを参照するPackageReferenceスタイルの方法を使用します。 –

+0

PackageReferenceスタイルの方法または私の質問でマルチターゲットを使用して説明されているように動作しています。奇妙なコンパイルは成功ですが、問題は実行時に発生します。ところで、私のコンソールアプリケーションはnetstandrdで動作しません。マルチターゲットでは、外部参照はnetstandard.libでコピーされ、問題は消えます。 NunitまたはConsoleアプリケーションでNetstandardクラスライブラリを使用する公式の方法で、ドキュメント/デモの例を教えてください。ありがとう –

関連する問題