为什么不将ServiceStack.Text复制到Bin?

7 nuget servicestack

我已经通过Nuget将ServiceStack.Redis添加到我拥有的程序集中.该包依赖于ServiceStack.Common,它依赖于ServiceStack.Text

这个项目是从我的web项目中引用的,但是当我构建网站并在浏览器中加载它时,我得到了错误

无法加载文件或程序集'ServiceStack.Text,Version = 3.9.24.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一.该系统找不到指定的文件.

果然,当我进入我网站的Bin目录时,它不在那里.奇怪的是,如果我进入我引用的类库的Bin目录(我将Nuget包拉入的那个)它就在那里.

回顾一下

  • ClassLibrary
    • ServiceStack.Redis通过Nuget(包括ServiceStack.Common和ServiceStack.Text)
    • 所有这些在构建时都在Bin目录中
  • Web项目
    • 参考ClassLibrary
    • ServiceStack.Text 外,所有依赖项都移动到Bin

我很难过.有谁知道为什么?

注意:该错误似乎在寻找版本3.9.24,但Nuget的版本是3.9.26.如果我手动将它移动到Web/Bin它可以工作

Mik*_*ock 1

检查 .csproj 文件中的程序集引用属性,也许它们仍在引用旧版本的 ServiceStack.Text。有时我发现 NuGet 在包更新过程中的某个时刻会失败,并使程序集引用处于错误状态。例如,您的packages.config文件可能正确显示所有 ServiceStack 引用都具有相同的版本号,但您的.csproj文件可能引用3.9.24forServiceStack.Common3.9.26for ServiceStack.Text. 因此,它会将这些程序集的不同版本复制到您的 bin 目录中。它可能仍然可以成功构建,因为您在 NuGet 包目录中缓存了 ServiceStack.Common 的旧副本。

我通过手动编辑 .csproj 文件以获得正确的程序集路径和版本号,或者通过 NuGet 卸载并重新安装受影响的包来修复此问题(这可能需要重新安装大多数/所有 ServiceStack 包,因为 ServiceStack.Text 是这样的低级依赖。