我正在运行Visual Studio 2017 15.6.3。
我有一个.NET Standard 2.0 DLL项目,其中包含用于ServiceStack的Request和Response类。 Request类实现了IReturn<>。
我有一个引用.NET标准DLL的.NET Core 2.0控制台EXE项目。此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'的引用。“
我想不出它为什么不起作用的原因:
我认为问题是Framework和Standard版本之间存在某种不匹配。谁能告诉我为什么我会收到这个错误?
答案 0 :(得分:3)
您无法在 .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 应用主机上运行 只有.NET v4.5版本包含对经典ASP.NET 或SelfHost HttpListener主机(即AspNetRequest
/ {{1})托管的支持})。您不能在经典ASP.NET Web项目中使用ServiceStack上的.NET Standard构建,因为构建在物理上不包含所需的依赖项和功能 - 这在.NET Standard 2.0中不可用(仅涵盖运行 ASP.NET Core 应用程序。)
有两种解决方案可以在.NET Framework v4.6.1 +和.NET Standard / .NET Core项目中共享同一项目:
为了能够与reference the .NET Standard only .Core
packages所需的.NET Framework项目共享AspNetResponse
,以便在安装NuGet软件包时 .NET v4.6.1 + 项目引用与.NET Standard或.NET Core项目相同的.NET Standard 2.0 dll。
另一种方法是维护多目标项目,这些项目同时创建.NET Framework和.NET Standard版本。这是Hello Mobile Shared Gateway项目用于支持.NET Framework和Mobile .NET Standard客户端以及ServiceStack Server.Common project用于同一ServiceStack Server实现的方法: