为什么我收到错误“类型’IReturn ‘是在未引用的程序集中定义的”使用VIsualStudio 2017中的ServiceStack

我正在运行Visual Studio 2017 15.6.3。

我有一个.NET Standard 2.0 DLL项目,其中包含与ServiceStack一起使用的Request和Response类。 Request类实现了IReturn 。

我有一个.NET Core 2.0控制台EXE项目,它引用了.NET标准DLL。 此EXE使用ServiceStack JsonServiceClient将请求发送到ServiceStack服务。 它编译并正常工作。

我添加了一个.NET Framework 4.6.1控制台EXE项目,该项目也引用了.NET Standard 2.0 DLL。 它必须是一个Framework应用程序,因为它引用了与Core或Standard不兼容的其他DLL。 此EXE使用ServiceStack JsonServiceClient将请求发送到与.NET Core EXE完全相同的ServiceStack服务,但此程序将无法编译。 框架4.6.1应该支持.NET Standard 2.0 DLL,但由于某种原因它与IReturn 接口有冲突。

var extentRequest = new ExtentRequest { ... }; using (var client = new JsonServiceClient(baseUrl)) { return client.Post(extentRequest); } 

返回的错误是:“类型’IReturn ‘在未引用的程序集中定义。您必须添加对程序集’ServiceStack.Interfaces,Version = 5.0.0.0,Culture = neutral,PublicKeyToken = null’的引用。 “

我想不出有什么理由不工作:

  1. 当我查看项目的引用列表时,我看到ServiceStack.Interfaces,它的属性说它是版本5.0.0.0。
  2. 我可以在Framework可执行项目代码中使用“Peek Definition”,并通过inheritance链来查找IReturn ,以便它知道类型。
  3. 这三个项目都使用了NuGet获得的ServiceStack 5.0.2版。
  4. 为x64配置和编译所有项目。

我认为问题是Framework和Standard版本之间存在某种不匹配。 谁能告诉我为什么我收到这个错误?

您不能在.NET Core.NET Standard项目中与.NET Framework依赖项共享.NET Framework .dll ,反之亦然。

大多数ServiceStack NuGet包都包含.NET v4.5和.NET Standard 2.0版本:

  • net45 – 包含对运行ASP.NET Web或自托管HttpListener应用程序主机的支持
  • netstandard2.0 – 包含仅在ASP.NET Core App主机上运行的支持

只有.NET v4.5版本才支持在经典ASP.NET或SelfHost HttpListener主机(即AspNetRequest / AspNetResponse )上进行托管。 您不能在经典ASP.NET Web项目中使用ServiceStack上的.NET Standard构建,因为构建在物理上不包含所需的依赖项和function – 这在.NET Standard 2.0中不可用(仅涵盖运行的ASP.NET核心应用程序) 。

有两种解决方案可以在.NET Framework v4.6.1 +和.NET Standard / .NET Core项目中共享同一项目:

仅引用.Core .NET Standard包

为了能够与.NET Framework项目共享相同的.dll ,您需要引用.NET Standard .Core包,以便在安装NuGet包时, .NET v4.6.1 +项目引用相同的.NET Standard 2.0 dll作为您的.NET Standard或.NET Core项目正在使用。

创建多目标.NET Framework和.NET Standard 2.0项目

另一种方法是维护多目标项目,这些项目同时创建.NET Framework和.NET Standard构建。 这是Hello Mobile Shared Gateway项目用于支持.NET Framework和Mobile .NET Standard客户端以及ServiceStack Server.Common项目用于同一ServiceStack Server实现的方法:

  • Server.NetCore – 在ASP.NET Core 2.0应用程序中托管ServiceStack服务
  • Server.NetCoreFx – 在.NET Framework上的ASP.NET核心应用程序中托管
  • Server.AspNet – 托管经典的ASP.NET框架 Web应用程序
  • Server.HttpListener – .NET Framework自托管HttpListener AppHost中的主机