[C#] 反射出現 Unhandled exception. System.IO.FileNotFoundException

2021-08-06

紀錄一下 太久沒有寫反射惹,然後遇到一個小問題,所以筆記一下免得自己又再次忘記,主要我有一個專案這邊叫做 Plugin.dll 因為我有寫一個 function 裡面會用到 JSON.net ,之後呼叫就發生 Exception

Unhandled exception. System.IO.FileNotFoundException: Could not load file or assembly 'Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'. 系統找不到指定的檔案。




要被呼叫的 Class ,這裡面我有使用到 JSON.net

C# Code:

public class User { public string Name { get; set; } public DateTime Birth { get; set; } } public class Main2 : IScylla { public int Version { get { return 1946; } } public string Name { get { return "MAIN2"; } } public string Input { get; set; } public string InvokeScylla(string input) { var u = JsonConvert.DeserializeObject<User>(input); u.Name += "--ScyllaDLL1"; u.Birth = u.Birth.AddYears(196); return JsonConvert.SerializeObject(u); } }


反射端,這時候因為我本身專案沒有引入 JSON.net 所以必須要先 LoadFrom

C# Code:

public static string LoadAndInvoke(string ddlPath, string className, string input) { Assembly assembly = Assembly.LoadFrom(ddlPath); Assembly.LoadFrom(@"C:\\Users\\donma\\source\\repos\\sample\\ScyllaDLL1\\bin\\Debug\\netcoreapp3.1\\lib\\Newtonsoft.Json.dll"); foreach (var t in assembly.GetTypes()) { if (t.IsClass && t.Name == className) { return (Activator.CreateInstance(t) as IScylla).InvokeScylla(input); } } throw new EntryPointNotFoundException("I cant Find class."); } var u = new User(); u.Name = "許當麻"; u.Birth = new DateTime(1983, 6, 21); var uJSON = JsonSerializer.Serialize(u); var result = Scylla.Helper.LoadAndInvoke(@"C:\\Users\\donma\\source\\repos\\sample\\ScyllaDLL1\\bin\\Debug\\netcoreapp3.1\\ScyllaDLL1.dll", "Main2",uJSON ); Console.WriteLine(result);


之後就可以成功呼叫了,雖然很簡單,因為太久沒寫了,花了一點時間猜了一下,因為關鍵字也不好下。


當麻許的碎念筆記 2014 | Donma Hsu Design.