我正在运行 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’的引用。 ”
我想不出它不起作用的任何原因:
- 当我查看该项目的引用列表时,我看到 ServiceStack.Interfaces 及其属性表明它的版本是 5.0.0.0。
- 我可以在框架可执行项目代码中使用“Peek Definition”,并通过继承链找到 IReturn,以便它知道类型。
- 所有三个项目都使用通过 NuGet 获取的 ServiceStack 版本 5.0.2。
- 所有项目均针对 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(使用前将#替换为@)