2017-08-31 12 views
3

独自の処理を行うための単純なインターフェイスを実装する「アダプタ」に大きく依存しているシステムがあります。通常、これらはアセンブリ名で動的にロードされますが、この場合は単にソリューション内から「ライブラリ」としてロードするだけです。 dotnet Core 2.0では、これは壊れているようです。私はこの問題を示す小さなサンプルを含めています。おそらく、私のデザインに欠陥があるか、何かが変わったでしょう。これと同じパターンは、dotnet Framework(Coreより前)ではうまくいきます。dotnetコア2.0のライブラリでFileNotFound例外が発生する

サンプルプロジェクトのサンプルショットが含まれていますが、これはそのサンプルです。

Solution Folder Layout

私はExternalAdapter呼ばDOTNETコア2.0 "ライブラリ" を持っています。

public class TheAdapter : TestExternalInterface.Interfaces.ISomeExternalAdapter 
{ 
    public string GetSomeValue(string valueType) 
    { 
     switch (valueType) 
     { 
      case "Red": 
      case "red": 
       return "Your color is red"; 
      case "Blue": 
      case "blue": 
       return "Your color is blue"; 

      default: 
       return "Unknown Value Type"; 
     } 
    } 

    public List<string> GetSomeValues(string valueType) 
    { 
     switch (valueType) 
     { 
      case "Color": 
      case "color": 
       return new List<string> { "Red", "Blue" }; 
      case "Flavor": 
      case "flavor": 
       return new List<string> { "Sweet", "Savory" }; 

      default: 
       return new List<string> { "Color", "Flavor" }; 
     } 
    } 
} 

ISomeExternalAdapterインターフェイスを実装するTheAdapterという名前のクラスがあります。

私はISomeExternalAdapterインターフェイスとして新しいExternalAdapter.TheAdapter()をインスタンス化するdotnet core 2.0 "コンソールアプリ"を持っています。

class Program 
{ 
    static void Main(string[] args) 
    { 
     try 
     { 
      Console.WriteLine("About to load external adapter...Press <ENTER> to continue."); 
      Console.ReadLine(); 
      LoadAndTestExternalAdapter();    
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex); 
     } 
     Console.ReadLine(); 
    } 

    private static void LoadAndTestExternalAdapter() 
    { 
     Interfaces.ISomeExternalAdapter adapter = new ExternalAdapter.TheAdapter() as Interfaces.ISomeExternalAdapter; 
     Console.WriteLine(adapter.GetSomeValue("red")); 
     Console.WriteLine(adapter.GetSomeValues("flavor")); 
    } 
} 

これはSystem.IO.FileNotFoundExceptionで失敗します。

は、 'カルチャニュートラル、PublicKeyToken = = null、ExternalAdapter、バージョン= 1.0.0.0' ファイルまたはアセンブリをロードできませんでした。システムは、指定されたファイルを見つけることができません。

ただし、メインプログラムの\ bin \ Debug \ netcoreapp2.0フォルダを見ると、ExternalAdapter.dllが見つかります。

私がクリーン/リビルドを行うと、忠実にそこに置かれるので、ファイルが見つかるはずです。

これは2.0のバグですか?または「インタフェース」アダプタを別の方法でロードする必要がありますか?

私たちの最終的なプロジェクトには、サーバーで行う必要がある処理の種類によって、インターフェイス経由でロードされる数多くの「アダプタ」がありますが、この小さな例では主なアプリケーションで発生している問題を指摘しています。 何かすべての助けに感謝します。

答えて

0

"Interface Definition"を独自のライブラリに移動し、そのライブラリをMy ExternalAdapterプロジェクトとMy TestExternalInterfaceプロジェクトの参照として含めて、問題を解決しました。いずれにしても、2.0へのアップデートで修正されている - わからない。しかし、1ヶ月後に私はこの作業をしています。新しいプロジェクトレイアウトのスクリーンショットは、次のとおりです。

New Project Layout

関連する問題