我创建了一个visualstudio(community2019)项目,其中c#使用 ServiceStack.Redis
. 因为它是c#,所以我使用windows10(有一个windows的redis版本,但它确实很旧,而且据我所知,它是非官方的,所以我担心这可能是问题所在)。以下是我的代码摘录:
public class PeopleStorage: IDisposable
{
public PeopleStorage()
{
redisManager = new RedisManagerPool("localhost");
redis = (RedisClient)redisManager.GetClient();
facts = (RedisTypedClient<List<Fact>>)redis.As<List<Fact>>();
}
public List<Fact> GetFacts(int id)
{
string sid = id.ToString();
if (facts.ContainsKey(sid))
return facts[sid];
return accessor.GetFacts(id);
}
private RedisTypedClient<List<Fact>> facts;
private RedisClient redis;
private RedisManagerPool redisManager;
}
试图连接到redis return facts[sid];
,出现异常:
system.io.fileloadexception:“无法加载文件或程序集”system.runtime.compilerservices.unsafe,版本=4.0.4.1,区域性=中性,publickeytoken=b03f5f7f11d50a3a“或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配(hresult异常:0x80131040)
(可能是我翻译的不准确)
我试过更新所有的软件包,从 ServiceStack
包,以结尾 System.Runtime.CompilerServices.Unsafe
它自己。此外,您不能在nuget中选择4.0.4.1版本,最接近的版本是4.0.0,而相关的版本是4.0.7。
我不明白为什么它使用这个版本,我如何才能解决这个问题。
即使重新安装visualstudio也无济于事。
2条答案
按热度按时间svdrlsy41#
无法加载文件或程序集system.runtime.compilerservices.unsafe
似乎已安装system.runtime.compilerservices.unsafe nuget包
4.5.3
版本。它对应于System.Runtime.CompilerServices.Unsafe.dll
程序集版本4.0.4.1
.建议
1) 请尝试注册
System.Runtime.CompilerServices.Unsafe
版本4.0.4.1
这样系统就可以。以管理员身份运行vs2019的开发人员命令提示符
类型:
2) 如果将net framework项目用于
.config
文件,可以使用bindingredirect。把这些加进去
app.config
文件或web.config
文件:另外,如果你更新
System.Runtime.CompilerServices.Unsafe
如果要将nuget包版本更改为较新版本,还应更改bindingredirect程序集版本。您可以参考
System.Runtime.CompilerServices.Unsafe
4.5.x
是System.Runtime.CompilerServices.Unsafe
nuget包版本4.0.x.x
是System.Runtime.CompilerServices.Unsafe.dll
程序集版本。m2xkgtsf2#
我假设您使用的是.net framework。此错误以
ServiceStack.Redis
在github上被追踪。发生这种情况是因为您使用的库依赖于的不同版本System.Runtime.CompilerServices.Unsafe
. 需要解析和合并这些可传递的依赖项,以便在输出文件夹中得到一个程序集。您将得到这些版本中的最新版本。因此,如果其中一个库依赖于较旧的特定版本,则不会找到它。导致此问题的错误已在中修复
System.Runtime.CompilerServices.Unsafe
4.6.0
. 使用绑定重定向加载所需程序集的特定版本。将此代码段插入您的所有app.config
文件夹。您需要指定所需的程序集的程序集版本
newVersion
. 这与安装nuget包时选择的包版本不同。它们对应如下:包4.5.3包含的程序集版本为4.0.4.1
包4.7.0包含程序集版本4.0.6.0
在这个绑定重定向中,我使用的是
System.Runtime.CompilerServices.Unsafe
修复了错误。但是,如果您依赖旧版本,请使用4.0.4.1
.