独自の処理を行うための単純なインターフェイスを実装する「アダプタ」に大きく依存しているシステムがあります。通常、これらはアセンブリ名で動的にロードされますが、この場合は単にソリューション内から「ライブラリ」としてロードするだけです。 dotnet Core 2.0では、これは壊れているようです。私はこの問題を示す小さなサンプルを含めています。おそらく、私のデザインに欠陥があるか、何かが変わったでしょう。これと同じパターンは、dotnet Framework(Coreより前)ではうまくいきます。dotnetコア2.0のライブラリでFileNotFound例外が発生する
サンプルプロジェクトのサンプルショットが含まれていますが、これはそのサンプルです。
私は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のバグですか?または「インタフェース」アダプタを別の方法でロードする必要がありますか?
私たちの最終的なプロジェクトには、サーバーで行う必要がある処理の種類によって、インターフェイス経由でロードされる数多くの「アダプタ」がありますが、この小さな例では主なアプリケーションで発生している問題を指摘しています。 何かすべての助けに感謝します。