2017-08-31 24 views
3

我们有一个系统在很大程度上依赖于“适配器”,它实现了一个简单的接口来执行独特的处理。通常情况下,我们通过程序集名称动态加载它们,但在这种情况下,我们只是想从我们的解决方案中将它们加载为“库”。在dotnet Core 2.0中,这似乎被打破了。我包括一个展示这个问题的小样本。也许我的设计有缺陷,或者有所改变。在dotnet Framework(Core之前)中,这种模式对我们来说效果很好。dotnet core 2.0中的库得到FileNotFound异常

我包括一个示例和我的示例项目的样子的屏幕截图,但这是它的主题。

Solution Folder Layout

我有一个DOTNET核心2.0 “库” 之称ExternalAdapter。

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" }; 
     } 
    } 
} 

它有一个类,任命TheAdapter实现了ISomeExternalAdapter接口。

我有一个dotnet核心2.0“控制台应用程序”,它将一个新的ExternalAdapter.TheAdapter()实例化为ISomeExternalAdapter接口。

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:找不到

无法加载文件或程序集 'ExternalAdapter,版本= 1.0.0.0,文化=中性公钥=空'。该系统找不到指定的文件。

但是,当我在主程序的\ bin \ Debug \ netcoreapp2.0文件夹中找到ExternalAdapter.dll时,找到了。

如果我做一个干净/重建,它忠实地把它放在那里,所以我很确定该文件应该被发现。

这是2.0中的错误吗?或者我们需要以不同的方式加载“接口”适配器?

我们最终的项目有几十个“适配器”,它们将通过它们的接口加载,具体取决于我们需要在服务器上执行的处理类型,但是这个小例子指出了我们在主应用程序中遇到的问题。 任何和所有的帮助表示赞赏。

回答

0

该问题已通过将“接口定义”移动到其自己的库中,并将该库作为参考添加到我的ExternalAdapter项目和我的TestExternalInterface项目中解决。不管怎样,2.0版的更新已经修复了它 - 我不确定。但一个月后,我有这个工作。新项目布局的屏幕截图如下:

New Project Layout