C# Unity Error: Could not load file or assembly
C# Unity Error: Could not load file or assembly
我在 Unity 上找到了这篇演示文章。看起来很简单,但我收到以下错误:
Could not load file or assembly
'System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its
dependencies. The located assembly's manifest definition does not
match the assembly reference. (Exception from 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());
}
}
}
当我尝试重现该问题时,在我 运行 System.Runtime.CompilerServices.Unsafe
的 NuGet 更新后错误消失了。
如果您的 NuGet 与您的项目配合得很好,Jasen 是正确的,但我没那么幸运(当我尝试重新添加包时,我遇到了同样的错误)。
修复该错误的方法是在 app/web 配置中为 'missing' 程序集添加一个 dependentAssembly 条目(这是 NuGet 安装背后的魔法,应该会自动发生)。
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
</dependentAssembly>
...
就我而言,我的解决方案中有几个项目。我在其中一个项目中安装了带有 Nuget 的 Unity 而我在另一个项目中安装了 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>
一个项目使用 4.7.0,另一个使用 4.5
我更新到最后一个版本解决了
您也可以右键单击解决方案 - 管理解决方案的 Nuget 包并安装一个包,只需一步即可选择哪些项目将拥有该包。
我在 Unity 上找到了这篇演示文章。看起来很简单,但我收到以下错误:
Could not load file or assembly 'System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from 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());
}
}
}
当我尝试重现该问题时,在我 运行 System.Runtime.CompilerServices.Unsafe
的 NuGet 更新后错误消失了。
如果您的 NuGet 与您的项目配合得很好,Jasen 是正确的,但我没那么幸运(当我尝试重新添加包时,我遇到了同样的错误)。
修复该错误的方法是在 app/web 配置中为 'missing' 程序集添加一个 dependentAssembly 条目(这是 NuGet 安装背后的魔法,应该会自动发生)。
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
</dependentAssembly>
...
就我而言,我的解决方案中有几个项目。我在其中一个项目中安装了带有 Nuget 的 Unity 而我在另一个项目中安装了 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>
一个项目使用 4.7.0,另一个使用 4.5 我更新到最后一个版本解决了
您也可以右键单击解决方案 - 管理解决方案的 Nuget 包并安装一个包,只需一步即可选择哪些项目将拥有该包。