【问题标题】:ServiceStack using DotNetStandard Service Model in .Net framework web projectServiceStack 在 .Net 框架 Web 项目中使用 DotNetStandard 服务模型
【发布时间】:2018-07-09 04:16:43
【问题描述】:

我们最近使用 ServiceStack 创建了一个新的 DotNetCore Web 服务。 ServiceModel 项目是一个 DotNet 标准类库 v2.0。

我在从使用 DotNet Framework 4.6.1 编写的现有 Web 服务中引用新的 ServiceModel 时遇到编译错误。看起来通过引用新的 ServiceModel,它正在拉入与 DotNet Framework 项目中已经引用的 ServiceStack.Interfaces 冲突的 ServiceStack.Interfaces.Core。

我们还不打算将这些现有服务升级到 DotNetCore。有没有办法在 DotNet 框架 Web 服务中使用 DotNet 标准服务模型?

[编辑 1]

发现了一个类似的问题here。我的 ServiceModel 仅引用 ServiceStack.Interfaces.Core(5.1.0)。 .net Framework 项目面向 v4.6.1 并使用 ServiceStack v4.5.8。我是否需要升级到最新的服务堆栈才能使其正常工作?

[编辑 2]

将 .net Framework 项目中的 ServiceStack 版本升级到 5.1.0。这修复了那些未实现 IServiceClient 错误的服务。但是,现在我得到了

  • 类型“IReturn”是在一个程序集中定义的,它不是 参考。您必须添加对程序集的引用 'ServiceStack.Interfaces,版本=5.0.0.0,文化=中性, PublicKeyToken=null'。

  • 方法的类型参数 'IServiceGateway.Send(object)' 不能从 用法。尝试明确指定类型参数。

【问题讨论】:

    标签: c# servicestack


    【解决方案1】:

    如果你想同时支持经典的 ASP.NET Framework 项目和 .NET Core 项目,你需要多目标。有关详细信息,请参阅之前的答案:

    https://stackoverflow.com/a/49417944/85785

    如果您只想支持 ASP.NET Core .NET Framework 项目和 .NET Core 项目(即两个 ASP.NET Core 项目),您可以reference ServiceStack’s *.Core projects,它只包含 .NET Standard 版本。

    或者,您可以避免共享 ServiceModel.dll 项目的二进制耦合,并让经典 ASP.NET 项目通过 C# Add ServiceStack Reference 引用您的 DTO。

    【讨论】:

    • 当你说我需要“引用 ServiceStack 的 *.Core” 包时,你的意思是使用 ServiceModel 的项目需要引用那些?
    • @CoffeeAddict 我的字面意思是ServiceStack’s .Core packages 强制 ASP.NET Core Framework 项目引用与 .NET Core 项目相同的 .NET Standard 2.0 版本。
    • 我试图理解上面那个链接中的内容。我的理解是 .NET Framework 4.6.1 项目应该能够只使用 .NET Standard 代码库 dll。链接文本说您重新发布了仅包含 .NET 标准 2.0 构建的 .Core Nuget 包,因此 .NET Framework 项目可以使用它。这是有道理的。我的 ServiceModel 是一个 .NET Standard 库,仅引用 ServiceStack.Interfaces.Core(这是一个 .NET Standard 库)。那么我4.6.1版本的.NET Framework ASP.NET应用应该可以消费了吧?我在这里错过了什么?
    • @CoffeeAddict 不,请看我的linked answer very carefully 一个经典的 ASP.NET Framework 项目需要多目标,只有 ASP.NET Core 框架项目可以避免多目标通过引用*.Core 包。如果您尝试从 v4.6.1 项目调用 ASP.NET Core 项目,我的回答解释了仅有的两个可用选项,即 Multi Target 或使用 C# Add ServiceStack Reference。
    猜你喜欢
    • 2018-12-20
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 2015-03-10
    相关资源
    最近更新 更多