Unityでこのデモ記事を見つけました。かなり簡単に見えますが、次のエラーが発生します。
ファイルまたはアセンブリ 'System.Runtime.CompilerServices.Unsafe、Version = 4.0.4.1、Culture = neutral、PublicKeyToken = b03f5f7f11d50a3a'またはその依存関係の1つを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。 (HRESULTからの例外:0x80131040)
https://www.tutorialsteacher.com/ioc/register-and-resolve-in-unity-container
using System;
using Unity;
namespace UnityContainerDemo
{
class Program
{
static void Main(string[] args)
{
var container = new UnityContainer();
container.RegisterType<ICar, BMW>();// Map ICar with BMW
//Resolves dependencies and returns Driver object
Driver drv = container.Resolve<Driver>();
drv.RunCar();
}
}
public interface ICar
{
int Run();
}
public class BMW : ICar
{
private int _miles = 0;
public int Run()
{
return ++_miles;
}
}
public class Ford : ICar
{
private int _miles = 0;
public int Run()
{
return ++_miles;
}
}
public class Audi : ICar
{
private int _miles = 0;
public int Run()
{
return ++_miles;
}
}
public class Driver
{
private ICar _car = null;
public Driver(ICar car)
{
_car = car;
}
public void RunCar()
{
Console.WriteLine("Running {0} - {1} mile ", _car.GetType().Name, _car.Run());
}
}
}
私の場合、ソリューションにはいくつかのプロジェクトがあります。 Unityを別のプロジェクトにインストールしているときに、いずれかのプロジェクトにNugetを使用してUnityをインストールした後、このエラーが発生しました。この問題は、CompilerServices.Unsafeのライブラリのバージョンが異なる場合に発生します。
Unityがインストールされているすべてのプロジェクトのapp.configファイルとpackcages.configファイル(特にこのファイル)を確認しました。バージョンはすべて同じである必要があります。私の場合:
<packages>
<package id="System.Runtime.CompilerServices.Unsafe" version="4.7.0" targetFramework="net48" />
<package id="Unity" version="5.11.2" targetFramework="net48" />
</packages>
1つのプロジェクトは4.7.0を使用し、もう1つのプロジェクトは4.5を使用して最後のバージョンに更新して解決しました。
また、ソリューションを右クリックして、ソリューションのNugetパッケージを管理し、パッケージをインストールして、どのプロジェクトがそのパッケージを持つかを1ステップで選択することもできます。