Не удалось загрузить тип "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:\inetpub\wwwroot\WebAPI\Falck.WebAPI\Global.asax.cs:17
Falck.WebAPI.Global.Application_Start(Object sender, EventArgs e) in c:\inetpub\wwwroot\WebAPI\Falck.WebAPI\Global.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.
ТЛ; др;
Для решения проблемы добавьте -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 && <4.0).
В прежние времена (NuGet 2.7) для этого требовалось использовать ServiceStack.Common версии 3.9.71 (наибольший доступный номер патча), но теперь он тянет на 3.9.11 (наименьшая версия патча на основной / вспомогательной версии 3.9).
ServiceStack.Common v3.9.11 вообще не имеет ограничения версии на свои зависимости, поэтому загружает версии 4 (коммерчески лицензированные!) Версий других пакетов, включая свою собственную зависимость, ServiceStack.Text.
К счастью, NuGet включает переключатель командной строки, чтобы вернуться к старому поведению. Подробная информация об этом в примечаниях к выпуску (ссылка на tl; dr; раздел выше). В данном конкретном случае добавление -DependencyVersion Highest
получит наивысшую версию major, minor и patch, которая удовлетворяет ограничению, что означает, что версии 3.9.71 используются по всем направлениям.
Я столкнулся с той же проблемой и, повторяя слова Скотта 25.02, я использовал следующее в консоли диспетчера пакетов:
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.71ServiceStack.Common 3.9.71
ServiceStack.Common.dll 3.9.71
ServiceStack.Interfaces.dll 1.0.0ServiceStack.Redis 3.9.71
ServiceStack.Redis.dll 3.9.71
ServiceStack.OrmLite.SqlServer 3.9.71
ServiceStack.OrmLite.dll 3.9.71
ServiceStack.OrmLite.SqlServer.dll 3.9.71ServiceStack.Text 3.9.71
ServiceStack.Text.dll 3.9.71
Предложение:
- Удалите все ссылки из вашего проекта.
- Удалить
packages.config
, - Проверьте, что целью проекта является.NET 4.5.
- Очистить проект.
- Затем повторно запустите команду NuGet.
Удалите ссылку на Servicestack.Text и запустите
Install-Package ServiceStack.Text -Version 3.9.71
также удалите ссылку ServiceStack.Common и запустите
Install-Package ServiceStack.Common -Version 3.9.71