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

2024-04-10

我正在运行 Visual Studio 2017 15.6.3。

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

我有一个 .NET Core 2.0 控制台 EXE 项目,它引用 .NET Standard DLL。此 EXE 使用 ServiceStack JsonServiceClient 将请求发送到 ServiceStack 服务。它编译并运行良好。

我添加了一个 .NET Framework 4.6.1 控制台 EXE 项目,它也引用了 .NET Standard 2.0 DLL。它必须是一个框架应用程序,因为它引用了与 Core 或 Standard 不兼容的其他 DLL。该 EXE 使用 ServiceStack JsonServiceClient 向 ServiceStack 服务发送请求,与 .NET Core EXE 完全相同,但该程序无法编译。 Framework 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. 我可以在框架可执行项目代码中使用“Peek Definition”,并通过继承链找到 IReturn,以便它知道类型。
  3. 所有三个项目都使用通过 NuGet 获取的 ServiceStack 版本 5.0.2。
  4. 所有项目均针对 x64 配置和编译。

我认为问题是框架版本和标准版本之间存在某种不匹配。谁能告诉我为什么我会收到此错误?


您无法共享.NET框架.dll.NET Framework 依赖项.NET核心 or .NET标准项目,反之亦然。

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

  • net45- 包含对运行的支持ASP.NET网络或自托管Http监听器应用程序主机
  • netstandard2.0- 包含仅运行于ASP.NET 核心应用程序主机

仅 .NET v4.5 版本包含对托管的支持经典的 ASP.NET或 SelfHost HttpListener 主机(即AspNetRequest/AspNetResponse). You cannot在经典 ASP.NET Web 项目中使用 ServiceStack 上的 .NET Standard 构建,因为构建实际上并不包含所需的依赖项和功能 - 这在 .NET Standard 2.0 中不可用(仅涵盖运行ASP.NET 核心 Apps).

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

仅参考 .Core .NET Standard 包

为了能够分享相同的.dll对于 .NET Framework 项目,您需要仅参考 .NET 标准.Core包 http://docs.servicestack.net/templates-corefx#reference-core-packages这样当安装 NuGet 包时.NET v4.6.1+项目引用的 .NET Standard 2.0 dll 与您的 .NET Standard 或 .NET Core 项目使用的相同。

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

另一种方法是维护创建 .NET Framework 和 .NET Standard 版本的多目标项目。这就是该方法你好移动共享网关 https://github.com/ServiceStackApps/HelloMobile#servicestack-server-app项目用于支持 .NET Framework 和 Mobile .NET Standard 客户端以及ServiceStack Server.Common项目 https://github.com/ServiceStackApps/HelloMobile/blob/master/src/Server.Common/Server.Common.csproj使用相同的 ServiceStack Server 实现用于:

  • 服务器.Net核心 https://github.com/ServiceStackApps/HelloMobile/tree/master/src/Server.NetCore- 将 ServiceStack 服务托管在ASP.NET Core 2.0 应用程序
  • 服务器.NetCoreFx https://github.com/ServiceStackApps/HelloMobile/tree/master/src/Server.NetCoreFx- 托管在ASP.NET Core 应用程序 on the .NET框架
  • 服务器.AspNet https://github.com/ServiceStackApps/HelloMobile/tree/master/src/Server.AspNet- 主持经典ASP.NET框架网络应用程序
  • 服务器.HttpListener https://github.com/ServiceStackApps/HelloMobile/tree/master/src/Server.HttpListener- .NET Framework 自托管中的主机Http监听器 AppHost
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 在 OpenCL 中将函数作为参数传递

    是否可以在 OpenCL 1 2 中将函数指针传递给内核 我知道可以用C实现 但不知道如何在OpenCL的C中实现 编辑 我想做这篇文章中描述的同样的事情 在 C 中如何将函数作为参数传递 https stackoverflow com q
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • 使用实体框架从集合中删除项目

    我正在使用DDD 我有一个 Product 类 它是一个聚合根 public class Product IAggregateRoot public virtual ICollection
  • ASP .NET MVC,创建类似路由配置的永久链接

    我需要帮助在 MVC 网站中创建类似 URL 路由的永久链接 Slug 已设置为 www xyz com profile slug 代码为 routes MapRoute name Profile url profile slug defa
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧
  • 调试内存不足异常

    在修复我制作的小型 ASP NET C Web 应用程序的错误时 我遇到了 OutOfMemoryException 没有关于在哪里查看的提示 因为这是一个编译时错误 如何诊断此异常 我假设这正是内存分析发挥作用的地方 有小费吗 Thank
  • 如何用 kevent() 替换 select() 以获得更高的性能?

    来自Kqueue 维基百科页面 http en wikipedia org wiki Kqueue Kqueue 在内核和用户空间之间提供高效的输入和输出事件管道 因此 可以修改事件过滤器以及接收待处理事件 同时每次主事件循环迭代仅使用对
  • 转到 C# WPF 中的第一页

    我正在 WPF 中使用导航服务 为了导航到页面 我使用 this NavigationService Navigate new MyPage 为了返回我使用 this NavigationService GoBack 但是如何在不使用的情况
  • 为什么 FTPWebRequest 或 WebRequest 通常不接受 /../ 路径?

    我正在尝试从 ftp Web 服务器自动执行一些上传 下载任务 当我通过客户端甚至通过 Firefox 连接到服务器时 为了访问我的目录 我必须指定如下路径 ftp ftpserver com AB00000 incoming files
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它
  • 组合框项目为空但数据源已满

    将列表绑定到组合框后 其 dataSource Count 为 5 但组合框项目计数为 0 怎么会这样 我习惯了 Web 编程 而且这是在 Windows 窗体中进行的 所以不行combo DataBind 方法存在 这里的问题是 我试图以
  • C# 编译器如何决定发出可重定向的程序集引用?

    NET Compact Framework 引入了可重定向程序集引用 现在用于支持可移植类库 基本上 编译器会发出以下 MSIL assembly extern retargetable mscorlib publickeytoken 7C
  • “MyClass”的类型初始值设定项引发异常

    以下是我的Windows服务代码 当我调试代码时 我收到错误 异常 CSMessageUtility CSDetails 的类型初始值设定项引发异常 using System using System Collections Generic
  • C# using 语句、SQL 和 SqlConnection

    使用 using 语句 C SQL 可以吗 private static void CreateCommand string queryString string connectionString using SqlConnection c
  • string.Compare 行为

    怎么会这样呢 这是从VS2008中的立即窗口获取的 string Compare 1 string Compare 0 0 1 从言论来看字符串比较 http msdn microsoft com en us library 84787k2
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 如何使用 std::array 模拟 C 数组初始化“int arr[] = { e1, e2, e3, ... }”行为?

    注意 这个问题是关于不必指定元素数量并且仍然允许直接初始化嵌套类型 这个问题 https stackoverflow com questions 6111565 now that we have stdarray what uses are

随机推荐