为什么我收到错误“类型’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’的引用。 “
我想不出有什么理由不工作:
- 当我查看项目的引用列表时,我看到ServiceStack.Interfaces,它的属性说它是版本5.0.0.0。
- 我可以在Framework可执行项目代码中使用“Peek Definition”,并通过inheritance链来查找IReturn ,以便它知道类型。
- 这三个项目都使用了NuGet获得的ServiceStack 5.0.2版。
- 为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中的主机