2016-02-06 8 views
8

単体テストを実行しているときに、 "System.Reflection.TypeExtensions"を参照するポータブルランタイムライブラリDLLのメソッドを呼び出すと、FileNotFound例外が生成され、 "System .Reflection.TypeExtensions " Windows 10 Universalアプリケーションで同じコードを実行すると、エラーは発生しません。Windows 10ユニバーサルWindowsライブラリでBindingFlags型を参照するときにアセンブリをロードできません

プロジェクトは、.NET Framework 4.6およびWindows Universal 10.0をサポートするように設定されたC#ポータブルランタイムライブラリです。テストプロジェクトは.NET Framework 4.6を使用するように構成されています。

System.Reflection.BindingFlags型を使用するメソッドを呼び出そうとするたびに、次の例外が発生します。コールが開始されると例外が発生します(おそらく関数の実行中)。

Test method Sfx.Test.SignalExpressionTest.TestAddExpressions threw exception: 
System.IO.FileNotFoundException: Could not load file or assembly 'System.Reflection.TypeExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.=== Pre-bind state information === 
LOG: DisplayName = System.Reflection.TypeExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 
(Fully-specified) 
+4

私はそれを参照してください、醜いバグ。診断が難しい。NETCoreの依存関係は、もはや解体することは不可能です。回避策は、プロジェクトにNugetパッケージを追加することです。 –

+0

私もこれを発見しました(単体テストの問題?ユニットテストも実行しています):https://social.msdn.microsoft.com/Forums/windowshardware/en-US/37f248bb-c45c-4b17-ae45-45913e7ce4b8/portable -class-library-fail-to-jit-reference-systemreflectionbindingflags-when-running?forum = vsunittest – eschneider

+0

もちろん、まったく同じ問題です。どうしてNugetパッケージを追加したくないのかはわかりません。 BindingFlagsを動かすmellinoeからのコミットによって、1月15日にBorkenが得られたようです。バグを報告するだけで、[このWebページ](https://github.com/dotnet/corefx/issues)のNew Issueボタンをクリックすると、彼に知らせることができます。このようなバグはかなり正常であることを覚えておいてください.CoreFxは動きが速く、ほとんどテストされません。あなたは背中に矢を持つパイオニアです。 –

答えて

2

は行うには正しいことです。あなたは、この動作を参照してください理由はここにある:

  1. BindingFlagsは、現在、[1] System.Reflection.TypeExtensionsにさらされています。
  2. .NETコアクラスライブラリをコンパイルすると、コンパイラは型参照をSystem.Reflection.TypeExtensions!System.Reflection.BindingFlagsとして記録します。
  3. .NET Frameworkアプリケーションからクラスライブラリを使用する場合、System.Reflection.TypeExtensionsへの参照を追加する必要があります。そうしないと、コンパイラは型を解決できません。実行するためにすべてのコードを配備しなければならないユニットテストプロジェクトでも同じことが当てはまります。
  4. 実行時に、CLRは型を解決し、mscorlib!System.Reflection.BindingFlagsを指す型の前進を見つけ、コードをうまく実行します。

一般的な経験則として、.NET Coreは、アプリケーションをローカルに展開するように設計されています。つまり、アプリケーションがフォルダに展開されたときに、すべての依存関係を閉じる必要があります。配備されることもあります。単体テスト・プロジェクトは概念的にはクラス・ライブラリですが、アプリケーションのように実行されるので同じことが当てはまります。

もちろん、私たちは手作業でリファレンスを調整し、依存関係を掘り下げることを期待していません。あなたが現在見ているものは、ツール体験のすべての部分が正しいことをするわけではないプレリリースビットです。私の側から

つの質問:あなたはユニットテストフレームワークを使用しない

  1. ? xUnitまたはNUnitとは対照的に、MSTest(Microsoft.VisualStudio.TestTools.UnitTesting)であると想定していますか?

  2. あなたはどのランナーを使用していますか?私はそれが組み込みのVisual Studioテストエクスプローラ(ReSharperまたはTestDriven.NETとは対照的)であると想定していますか?


顧客からのフィードバックに基づいて、我々は一緒にBindingFlagsを取るAPIを使用して、バックSystem.Reflectionに移動するdecidedので、[1]私は現在言います。

+0

はい私はVisual Studioのユニットテストですべてのユニットテストを行っていますが、サードパーティは関係ありません。 – eschneider

+0

ありがとうございます。私はこれがVSのリリースで動作することを確認します。 –

+1

私のライブラリは.NET Standard 1.4をターゲットにしており、呼び出し元はフルフレームワーク4.6.1のコンソールアプリケーションです。 「プレリリースビット」は関係していませんが、私はまだこの同じ問題にぶつかりました。実際に修正されていることを確認するといいでしょう。 – HappyNomad

4

は、パッケージをnugetへの参照を追加します。それらのパッケージを追加する

System.Reflection 
System.Reflection.Extensions 
System.Reflection.Primitives 
+0

私はそれに答えても、私は100ポイントを失ったことを吸う。バウンティロジックに欠陥があります... – eschneider

+1

これをSystem.Reflection.TypeExtensionsに追加してください。 – CrusherJoe

関連する問題