Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<img src="//i.stack.imgur.com/WM7S8.png" height="16" width="18" alt="" class="sponsor tag img">servicestack 为什么不是';t ServiceStack.Text正在复制到Bin?_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack_Nuget - Fatal编程技术网 servicestack 为什么不是';t ServiceStack.Text正在复制到Bin?,servicestack,nuget,servicestack,Nuget" /> servicestack 为什么不是';t ServiceStack.Text正在复制到Bin?,servicestack,nuget,servicestack,Nuget" />

servicestack 为什么不是';t ServiceStack.Text正在复制到Bin?

servicestack 为什么不是';t ServiceStack.Text正在复制到Bin?,servicestack,nuget,servicestack,Nuget,我已经通过Nuget将ServiceStack.Redis添加到我拥有的程序集中。该包依赖于ServiceStack.Common,它依赖于ServiceStack.Text 此项目是从我的web项目中引用的,但当我构建网站并将其加载到浏览器中时,会出现错误 无法加载文件或程序集“ServiceStack.Text,Version=3.9.24.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。系统找不到指定的文件 果然,当我转到我网站的Bin目录时,它

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

此项目是从我的web项目中引用的,但当我构建网站并将其加载到浏览器中时,会出现错误

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

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

重述

  • 类库
    • 通过Nuget访问ServiceStack.Redis(包括ServiceStack.Common和ServiceStack.Text)
    • 所有这些都是在构建时放入Bin dir的
  • 网络项目
    • 参考类库
    • 除了ServiceStack.Text之外,所有依赖项都移动到Bin
我被难住了。有人知道为什么吗


注意:错误似乎是在查找版本3.9。24,但Nuget Pull的版本是3.9。26。如果我手动将其移动到Web/Bin,它会工作,尽管检查.csproj文件中的程序集引用属性,可能它们仍在引用旧版本的ServiceStack.Text。有时,我发现在包更新过程中,NuGet会在某个点失败,并使程序集引用处于错误状态。例如,您的
packages.config
文件可能正确地显示所有ServiceStack引用都是相同的版本号,但是您的
.csproj
文件可能引用了
ServiceStack.Common的
3.9.24
,而
ServiceStack.Text的
3.9.26
。因此,它会将这些程序集的不同版本复制到您的bin目录中。它可能仍然可以成功构建,因为您的NuGet packages目录中缓存了ServiceStack.Common的旧副本


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

正如esker所说,更新时Nuget可能会出现一些问题,但ServiceStack Nuget软件包也有一些问题

目前最新的工作包是3.9.60。ServiceStack.Text.dll实际上是3.9.60

ServiceStack 3.9.61及更高版本具有ServiceStack.Text.dll版本3.9.59


复制问题再次出现。

我在几个版本的Visual Studio、atm 2013中遇到了这个有点奇怪的问题。它是随机发生的

我也依赖于ServiceStack.Common,它隐式地依赖于ServiceStack.Text。但是,我不直接在任何地方引用ServiceStack.Text二进制文件中的任何类、结构或类似内容

甚至已经设定

复制本地=真

未将ServiceStack.Text.dll复制到输出文件夹

我在众多版本的ServiceStack dll(目前为v4.0.15)中都遇到过这种情况。这可能是Visual Studio关于在未直接使用的库中存在死角的依赖项链的一个更一般的错误?可能是ServiceStack。文本在其他ServiceStack dll中标记为依赖项,但Visual Studio试图通过看到,图书馆可以被排除在外(我只是猜测)

总之,我解决了这个问题,只需直接在私有方法中使用ServiceStack.Text,将其放入我自己库中随机使用的文件中:

//
///由于Visual Studio错误而需要?请不要使用此方法。
/// 
私有JsonValue DontDoIt()
{
返回新的ServiceStack.Text.JsonValue();
}

我希望编译器排除一个未使用的私有方法——事实上,它可能在IL代码中存在,但这仍然会使VS将dll复制到输出目录。

您可以尝试[this answer][1]。它对我有效。[1]: