Не удалось загрузить тип ' ServiceStack.Метод servicehost.IService ' при запуске ServiceStack

Я получаю вышеуказанную ошибку при вызове Init () на моем AppHost.

это на чистом asp.net V 4.5 пустое веб-приложение с простой службой HelloWorld в соответствии с руководством по началу работы.

Я специально использую более старую версию ServiceStack, установленную с:

Install-Package ServiceStack -Version 3.9.71

, который устанавливает ссылки на:

ServiceStack.dll 3.9.70.0
ServiceStack.Common.dll 3.9.9.0
ServiceStack.Interfaces.dll 3.9.9.0
ServiceStack.OrmLite.dll 3.9.14.0
ServiceStack.OrmLite.SqlServer.dll 1.0.0.0
ServiceStack.Redis.dll 3.9.11.0
ServiceStack.ServiceInterface.dll 3.9.70.0
ServiceStack.Text.dll 4.0.11.0

и ошибка, которую я получаю:

[TypeLoadException: Could not load type 'ServiceStack.ServiceHost.IService' from assembly 'ServiceStack.Interfaces, Version=3.9.9.0, Culture=neutral, PublicKeyToken=null'.]
   Falck.WebAPI.AppHost..ctor() in c:inetpubwwwrootWebAPIFalck.WebAPIGlobal.asax.cs:17
   Falck.WebAPI.Global.Application_Start(Object sender, EventArgs e) in c:inetpubwwwrootWebAPIFalck.WebAPIGlobal.asax.cs:29

[HttpException (0x80004005): Could not load type 'ServiceStack.ServiceHost.IService' from assembly 'ServiceStack.Interfaces, Version=3.9.9.0, Culture=neutral, PublicKeyToken=null'.]
   System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +9865825
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +118
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +172
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +336
   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +296

[HttpException (0x80004005): Could not load type 'ServiceStack.ServiceHost.IService' from assembly 'ServiceStack.Interfaces, Version=3.9.9.0, Culture=neutral, PublicKeyToken=null'.]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +9880168
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +101
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +254

Он говорит, что не может загрузить тип, но я понятия не имею почему?

Ниже приведен вывод из nuget:

Package Manager Console Host Version 2.8.50126.400

Type 'get-help NuGet' to see all available NuGet commands.

PM> Install-Package ServiceStack -Version 3.9.71
Attempting to resolve dependency 'ServiceStack.Common (≥ 3.0 && < 4.0)'.
Attempting to resolve dependency 'ServiceStack.Text'.
Attempting to resolve dependency 'ServiceStack.Redis (≥ 3.0 && < 4.0)'.
Attempting to resolve dependency 'ServiceStack.OrmLite.SqlServer (≥ 3.0 && < 4.0)'.
Installing 'ServiceStack.Text 4.0.11'.
You are downloading ServiceStack.Text from Service Stack, the license agreement to which is available at https://servicestack.net/terms. Check the package for additional dependencies, which may come with their own license agreement(s). Your use of the package and dependencies constitutes your acceptance of their license agreements. If you do not accept the license agreement(s), then delete the relevant components from your device.
Successfully installed 'ServiceStack.Text 4.0.11'.
Installing 'ServiceStack.Common 3.9.11'.
Successfully installed 'ServiceStack.Common 3.9.11'.
Installing 'ServiceStack.Redis 3.9.11'.
Successfully installed 'ServiceStack.Redis 3.9.11'.
Installing 'ServiceStack.OrmLite.SqlServer 3.9.14'.
Successfully installed 'ServiceStack.OrmLite.SqlServer 3.9.14'.
Installing 'ServiceStack 3.9.71'.
Successfully installed 'ServiceStack 3.9.71'.
Adding 'ServiceStack.Text 4.0.11' to Falck.WebAPI.
Successfully added 'ServiceStack.Text 4.0.11' to Falck.WebAPI.
Adding 'ServiceStack.Common 3.9.11' to Falck.WebAPI.
Successfully added 'ServiceStack.Common 3.9.11' to Falck.WebAPI.
Adding 'ServiceStack.Redis 3.9.11' to Falck.WebAPI.
Successfully added 'ServiceStack.Redis 3.9.11' to Falck.WebAPI.
Adding 'ServiceStack.OrmLite.SqlServer 3.9.14' to Falck.WebAPI.
Successfully added 'ServiceStack.OrmLite.SqlServer 3.9.14' to Falck.WebAPI.
Adding 'ServiceStack 3.9.71' to Falck.WebAPI.
Successfully added 'ServiceStack 3.9.71' to Falck.WebAPI.

4 ответов


это нарушение изменений, введенных (с благими намерениями) в NuGet версии 2.8. Я подозреваю, что @Scott работает под управлением версии 2.7 или ниже NuGet.

tl; dr;

чтобы решить проблему добавьте -DependencyVersion Highest до install-package команда на консоли управления пакетами в Visual Studio. Полная команда гласит:

Install-Package ServiceStack -Version 3.9.71 -DependencyVersion Highest

Подробный Ответ

в выпуске за NuGet версии 2.8, изменение разрешение зависимостей, изложенных.

старая версия нашла самые низкие основные и второстепенные версии, которые удовлетворяли зависимости, а затем загрузила самую высокую версию патча. Основанием для этого было то, что версии патчей должны быть для исправления ошибок и не вносить никаких изменений.

но, разработчики пакетов будучи разработчиками пакетов, некоторые "патч-версии" пакетов действительно вводили изменения, поэтому разные разработчики устанавливали пакеты в разное время получали разные наборы пакетов.

версия 2.8 NuGet пытается решить эту проблему, также потянув в низкий версия патча, которая удовлетворяет критериям. Это нарушает ServiceStack и, вероятно,целый ряд других пакетов.

ServiceStack имеет зависимость от ServiceStack.Common (>=3.0 && В старые времена (NuGet 2.7), это будет тянуть в версии 3.9.71 ServiceStack.Общий (самый высокий доступный номер патча), но теперь он тянет 3.9.11 (самая низкая версия патча на 3.9 major/minor версии).

ServiceStack.Общий v3.9.11 не имеет ограничения версии на свои зависимости вообще, поэтому тянет версию 4 (коммерчески лицензированную!) версии других пакетов, включая собственную зависимость ServiceStack.Текст.

к счастью, NuGet включает переключатель командной строки, чтобы вернуться к старому поведению. Подробности-в выпуске (ссылка в разделе tl; dr; выше). В этом конкретном случае добавление -DependencyVersion Highest получит самые высокие версии major, minor и patch, которые удовлетворяют ограничению, что означает, что версии 3.9.71 втягиваются по всем направлениям.


я запускал ту же проблему и переходил к тому, что сказал Скотт на 02/25, я использовал следующее на консоли диспетчера пакетов:

Install-Package ServiceStack -Version 3.9.71 -IgnoreDependencies
Install-Package ServiceStack.Common -Version 3.9.71 -IgnoreDependencies
Install-Package ServiceStack.OrmLite.SqlServer -Version 3.9.71 -IgnoreDependencies
Install-Package ServiceStack.Redis -Version 3.9.71 -IgnoreDependencies
Install-Package ServiceStack.Text -Version 3.9.71 -IgnoreDependencies

это удалось исправить проблему.


ваша установка пакета NuGet очень неправильная; что кажется странным, поскольку я запустил NuGet и получил правильные пакеты и версии.

под управлением Install-Package ServiceStack -Version 3.9.71 следует установить следующие пакеты, содержащие следующие версионные библиотеки DLL:

  • ServiceStack 3.9.71

    ServiceStack.dll файлы 3.9.71
    ServiceStack.ServiceInterface.dll файлы 3.9.71

  • ServiceStack.Общий 3.9.71

    ServiceStack.Общий.dll файлы 3.9.71
    ServiceStack.Межфазные границы.DLL-библиотека 1.0.0

  • ServiceStack.Redis 3.9.71

    ServiceStack.Рэдис.dll файлы 3.9.71

  • ServiceStack.OrmLite.От SQLServer 3.9.71

    ServiceStack.OrmLite.dll файлы 3.9.71
    ServiceStack.OrmLite.От SQLServer.файл DLL 3.9.71

  • ServiceStack.Текст 3.9.71

    ServiceStack.Текст.dll файлы 3.9.71

предложение:

  1. удалите все ссылки из вашего проекта.
  2. удалить packages.config.
  3. Регистрация целевого проекта .Нетто 4.5.
  4. очистить проект.
  5. затем повторно запустите команду NuGet.

удалите Servicestack.Текст ссылки и запустить

Install-Package ServiceStack.Text -Version 3.9.71

также удалите ServiceStack.Общая ссылка и run

Install-Package ServiceStack.Common -Version 3.9.71