Совместимость ServiceStack OrmLite-Mysql (5.4.0) (.net c #)

2

У нас есть решение, состоящее из проектов .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.

Изображение: установленные нюги

Тем не менее, при этом VS (как 2017, так и 2019 p3) выдаст мне сообщение об ошибках компиляции (среди прочего, но я думаю, что все они сводятся к одной и той же проблеме):

Тип "IOrmLiteDialectProvider" существует в обоих "ServiceStack.OrmLite, версия = 5.0.0.0, Culture = нейтральный, PublicKeyToken = null" и "ServiceStack.OrmLite, версия = 5.0.0.0, культура = нейтральный, PublicKeyToken = 02c12cbda47e6587"

Здесь мы видим, что один из пакетов имеет PublicKeyToken = null, а другой - ключ 02c12cbda47e6587. В чем может быть причина моих проблем, могу ли я неправильно понять, какие версии нугетов я должен использовать, или эти два пакета в версии 5.4.0 несовместимы?

(Если я установлю OrmLite.Mysql.Core версии 5.2.0 вместе с OrmLite 5.4.0, проект скомпилируется, но потерпит неудачу во время выполнения, поскольку они ссылаются на разные версии Mysql).

И наконец, кто-нибудь знает, почему стандартные пакеты .net называются "core". Мне было странно узнавать, что пакеты ядра могут использоваться в моих проектах .net Framework, поскольку проекты .net Core и .net Framework несовместимы, в то время как .net Core и .net Framework (конечно) могут использовать .net Standard.

Теги:
ormlite-servicestack
servicestack

1 ответ

0
Лучший ответ

Это исключение указывает, что у вас есть проект, который пытается ссылаться как на пакеты ServiceStack.OrmLite и на ServiceStack.OrmLite.Core в одном проекте, что вам никогда не следует делать.

Пожалуйста, внимательно прочитайте этот существующий ответ, на пакеты .Core следует ссылаться только при попытке запустить Базовые приложения ASP.NET в .NET Framework, но ни в коем случае нельзя .Core проекты, которые ссылаются на .Core как .Core и не .Core вместе Единственный способ, которым вы можете обмениваться зависимостями между различными платформами, - это многоцелевой таргетинг.

Вы можете найти пример решения, которое разделяет общий многоцелевой проект из:

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

Здесь показан пример того, как несколько хостов могут совместно использовать одни и те же проекты Server.Common и ServiceModel.csproj с помощью многоцелевого таргетинга:

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

Где .NET Core и ASP.NET Core в .NET Framework будут в конечном итоге использовать сборки netstandard2.0 из общих проектов, в то время как классические ASP.NET и HttpListener Hosts будут в конечном итоге использовать сборки net46.

  • 1
    У меня есть только два пакета ServiceStack; Ser ... OrmLite.Core и Ser ... OrmLite.Mysql.Core (в том же проекте .net Framework) Когда я запускаю оба на 5.4.0, я получаю сообщение об ошибке в моем предыдущем посте. Когда я изменяю Ser ... OrmLite.Mysql.Core на 5.2.0, он компилируется, но затем терпит неудачу во время выполнения, так как ссылка на MySQL. Внутри эти пакеты отличаются. Так что, насколько я понимаю, у меня больше нет проблем с выбором правильного вида упаковки. Однако я не могу найти два пакета, которые могут работать вместе. Обе версии 5.4.0 сообщат мне об ошибках компиляции, при попытке использования разных версий - ошибки времени выполнения.
  • 0
    @ErikLindberg Вы никогда не должны ссылаться на оба пакета, либо вы используете ASP.NET Core на .NET Fx, в этом случае вы должны использовать *.Core пакеты *.Core противном случае для любого другого проекта вы не должны ссылаться на какие- .Core пакеты .Core . Если вы все еще получаете эту ошибку, то я предполагаю, что у вас грязный проект, удалите все папки /bin и /obj затем выполните полное восстановление + сборку.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню