ServiceStack OrmLite-Mysql兼容性(5.4.0)(.net c#)

时间:2019-02-15 12:07:44

标签: c# .net servicestack ormlite-servicestack

我们有一个由.net Framework(4.7.2)和.net Standard(2.0)项目组成的解决方案。根据此页面:http://docs.servicestack.net/templates-corefx#reference-core-packages,我们应该仅引用.Core软件包。 在这种情况下,我们需要ServiceStack.OrmLite和ServiceStack.OrmLite.Mysql,因此我安装了ServiceStack.OrmLite.Core和ServiceStack.OrmLite.Mysql.Core。两者都使用相同的5.4.0版本。

Image: Installed nugets

但是,这样做时,VS(分别是2017年和2019年p3)会给我带来编译错误,指出(除其他外,我认为所有这些都归结为同一问题):

类型'IOrmLiteDialectProvider'在'ServiceStack.OrmLite,Version = 5.0.0.0,Culture = neutral,PublicKeyToken = null'和'ServiceStack.OrmLite,Version = 5.0.0.0,Culture = neutral,PublicKeyToken = 02c12cbda47e6587'中都存在

我们在这里看到的是,其中一个软件包的密钥为PublicKeyToken = null,而另一个软件包的密钥为02c12cbda47e6587。这可能是我问题的根源,我是否误解了应该使用的nuget版本,还是5.4.0版本中的这两个软件包不兼容?

(如果我将OrmLite.Mysql.Core版本5.2.0与OrmLite 5.4.0一起安装,则该项目可以编译,但由于它们引用的是Mysql的不同版本,因此在运行时将失败。)

最后,至少有人知道为什么.net标准软件包被称为“核心”。对我来说,了解核心软件包可以在我的.net Framework项目中使用令人困惑,因为.net Core和.net Framework项目不兼容,而.net Core和.net Framework(当然)都可以使用.net Standard。

1 个答案:

答案 0 :(得分:0)

此异常表明您有一个项目试图同时引用同一项目中的ServiceStack.OrmLiteServiceStack.OrmLite.Core程序包,而您从不应该这样做。

请仔细阅读此existing answer.Core包仅在尝试进行Run ASP.NET Core Apps on the .NET Framework时被引用,但是您绝对不能拥有同时引用两个.Core的项目和非.Core软件包一起使用,您可以在不同平台之间共享依赖项的唯一方法是多目标。

您可以从以下位置找到共享常见的多目标项目的解决方案示例:

https://github.com/ServiceStackApps/HelloMobile#servicestack-server-app

这显示了一个示例,该示例显示了多主机如何通过多目标共享相同的Server.CommonServiceModel.csproj项目:

  <PropertyGroup>
    <TargetFrameworks>net46;netstandard2.0</TargetFrameworks>
    <RootNamespace>Server</RootNamespace>
  </PropertyGroup>

.NET CoreASP.NET Core on .NET Framework将最终使用公共项目的netstandard2.0构建版本,而classic ASP.NETHttpListener主机最终将使用net46构建。