我已通过 Nuget 将 ServiceStack.Redis 添加到我拥有的程序集中。该包依赖于 ServiceStack.Common,后者依赖于 ServiceStack.Text
这个项目是从我的 web 项目中引用的,但是当我构建网站并在浏览器中加载它时,我收到错误
Could not load file or assembly 'ServiceStack.Text, Version=3.9.24.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
果然,当我转到我网站的 Bin 目录时,它不存在。奇怪的是,如果我转到我引用的类库的 Bin 目录(我将 Nuget 包拉入的那个),它就在那里。
回顾一下
我难住了。有谁知道为什么?
注:该错误似乎是在寻找 3.9 版。 24 ,但 Nuget 拉取的版本是 3.9。 26 .如果我手动将它移动到 Web/Bin,它虽然可以工作
最佳答案
检查 .csproj 文件中的程序集引用属性,也许它们仍在引用旧版本的 ServiceStack.Text。有时我发现 NuGet 会在包更新期间的某个时刻失败,并使您的程序集引用处于错误状态。例如,您的 packages.config
文件可能会正确显示所有 ServiceStack 引用的版本号相同,但您的 .csproj
文件可能正在引用 3.9.24
为 ServiceStack.Common
和 3.9.26
为 ServiceStack.Text
.因此,它会将这些程序集的不同版本复制到您的 bin 目录中。它可能仍然可以成功构建,因为您在 NuGet 包目录中缓存了 ServiceStack.Common 的旧副本。
我通过手动编辑 .csproj 文件以获得正确的程序集路径和版本号,或者通过 NuGet 卸载并重新安装受影响的包来解决这个问题(这可能需要重新安装大部分/所有 ServiceStack 包,因为 ServiceStack.Text 就是这样低级依赖。
关于servicestack - 为什么 ServiceStack.Text 没有被复制到 Bin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13097685/