C# dotnet core 2.0中的库get-FileNotFound异常

C# dotnet core 2.0中的库get-FileNotFound异常,c#,shared-libraries,.net-core,C#,Shared Libraries,.net Core,我们有一个严重依赖“适配器”的系统,这些适配器实现了一个简单的接口来执行独特的处理。通常,我们会根据程序集名称动态加载它们,但在本例中,我们只是希望从解决方案中将它们作为“库”加载。在DotnetCore2.0中,这似乎被打破了。我包括一个小样本,展示了这个问题。也许我的设计有缺陷,或者有些东西改变了。同样的模式在dotnet框架(在Core之前)中也很适用 我包括了一个示例和一个示例项目的屏幕截图,但这是它的jist 我有一个名为ExternalAdapter的DotnetCore2.0“库

我们有一个严重依赖“适配器”的系统,这些适配器实现了一个简单的接口来执行独特的处理。通常,我们会根据程序集名称动态加载它们,但在本例中,我们只是希望从解决方案中将它们作为“库”加载。在DotnetCore2.0中,这似乎被打破了。我包括一个小样本,展示了这个问题。也许我的设计有缺陷,或者有些东西改变了。同样的模式在dotnet框架(在Core之前)中也很适用

我包括了一个示例和一个示例项目的屏幕截图,但这是它的jist

我有一个名为ExternalAdapter的DotnetCore2.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" };
        }
    }
}
此操作失败,出现System.IO.FileNotFoundException:

无法加载文件或程序集“ExternalAdapter,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”。系统找不到指定的文件

但是,当我查看主程序的\bin\Debug\netcoreapp2.0文件夹时,会发现ExternalAdapter.dll

如果我进行清理/重建,它也会尽职尽责地将其放在那里,因此我非常确定应该找到该文件

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

我们最终的项目有几十个“适配器”,这些适配器将通过其接口加载,具体取决于我们需要在服务器上执行的处理类型,但这个小示例指出了我们主要应用程序中存在的问题。
感谢所有帮助。

通过将“接口定义”移动到其自己的库中,并将该库作为我的ExternalAdapter项目和我的TesterExternalLinterface项目中的参考,问题已经解决。或者,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"));
    }
}