CS0433: тип ‘IHttpHandler’ существует как в ServiceStack, так и в System.Web

#asp.net #servicestack

#asp.net #servicestack

Вопрос:

Я унаследовал наследие ASP.NET приложение, которое мне нужно поддерживать, пока оно выведено из эксплуатации, но я обнаружил, что некоторые веб-сайты не будут компилироваться из-за следующей ошибки:

CS0433: тип ‘IHttpHandler’ существует как в ‘ServiceStack, Version= 5.0.0.0, Culture= нейтральный, PublicKeyToken= null’, так и в ‘System.Web, версия = 4.0.0.0, Культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a’

Ошибка возникает, когда веб-сайт компилируется во временном ASP.NET Файлы. Нарушающая строка в файле * .cs, который создается ASP.NET в конце страницы Default.aspx находится:

 [System.Runtime.CompilerServices.CompilerGlobalScopeAttribute()]
    public class default_aspx : global::MyWebsite.Default, System.Web.SessionState.IRequiresSessionState, System.Web.IHttpHandler
 

Таким образом, интерфейс System.Web.IHttpHandler, который следует использовать, явно является тем, который объявлен в System.Web.dll . Однако на веб-сайте есть ссылка на бизнес-сервис, который сам ссылается на ServiceStack.dll, потому что он реализует клиент для API, который использует ServiceStack. Итак, ServiceStack.dll попадает в каталог bin веб-проекта при усложнении — и ServiceStack.dll также включает пространство имен и интерфейс System.Web.IHttpHandler, отсюда и ошибка.

Учитывая, что ссылка на ServiceStack не является прямой ссылкой с веб-сайта, я не могу успешно использовать псевдоним ссылки, чтобы интерфейс ServiceStack не упоминался как глобальный. И код, вызывающий ошибку, в любом случае генерируется автоматически. Есть ли какой-либо другой способ обойти это (кроме перезаписи клиента API для использования HttpClient, а не класса ServiceStack)?

Ответ №1:

Похоже, вы пытаетесь включить стандартную сборку ServiceStack .NET.dll, предназначенная для .NET Core в ASP.NET Рамочный проект.

Зависимость должна быть либо перестроена для целевой (или многоцелевой) сборки .NET v4.5 ServiceStack (которая не определяет этот интерфейс), так что только .NET Framework .на DLL-файлы ссылаются в ASP.NET проект. Библиотеки DLL ServiceStack .NET Standard 2.0 следует использовать только в ASP.NET Основные приложения.