У нас есть решение, состоящее из проектов .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.
Это исключение указывает, что у вас есть проект, который пытается ссылаться как на пакеты 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
.
*.Core
пакеты*.Core
противном случае для любого другого проекта вы не должны ссылаться на какие-.Core
пакеты.Core
. Если вы все еще получаете эту ошибку, то я предполагаю, что у вас грязный проект, удалите все папки/bin
и/obj
затем выполните полное восстановление + сборку.