久々にIronCADのプラグインを更新しようとしたら下記のエラーが…
ファイルまたはアセンブリ'System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublickeyToken=b03f5f7f11d50a3a'またはその依存関係の1つが読み込めませんでした。指定されたファイルが見つかりません。
どうもNewtonsoft.JsonをSysytem.Text.Jsonに変更してことでアセンブリが読み込めなくなっているということのようだ。
解決方法を検索すると参照の再設定か
- 参照をすべて削除
- nugetパッケージをすべて入れ直し
- 足りない参照を追加
app.configのoldVersionを手動で書き換えるかとなっている。
XML
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="6.0.0.0" />
</dependentAssembly>どちらも試してみたが効果なし
もしかしたらIroncadのexeと同じフォルダに置けばよかったのかも
SoridWorksのアドインのフォーラムで似たような症状の人を発見!
https://www.cadforum.net/viewtopic.php?t=2052
リンク先のコードを追加すると動くように

understanding CLR/System.IO.FileNotFoundException "Could not load file or assembly ... or one of its dependencies"
IhaveanissuewithusingSystem.Text.JsoninsindemyC#classlibrary,whichisaSolidWorksaddin.ItisprobablyaninstanceofDLLhellasdescribedhere.Sincethisapproachdoesnotwork...
C#
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);C#
private static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args)
{
var nameCompilerServicesUnsafe = "System.Runtime.CompilerServices.Unsafe";
if (args.Name == nameCompilerServicesUnsafe + ", Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")
{
var assemblyPath = Assembly.GetCallingAssembly().Location;
if (Path.GetFileName(assemblyPath) == "System.Text.Json.dll")
{
var assemblyFolder = Path.GetDirectoryName(assemblyPath);
var pathCompilerServicesUnsafe = Path.Combine(assemblyFolder, nameCompilerServicesUnsafe + ".dll");
if (File.Exists(pathCompilerServicesUnsafe))
return Assembly.LoadFile(pathCompilerServicesUnsafe);
}
}
return null;
}IronCAD本体がSystem.Runtime.CompilerServices.UnsafeのVersion=4.0.4.1の依存関係があるSystem.Text.Jsonを使っているからエラーが発生したようだ。

コメント