首页 > 解决方案 > CS0433:ServiceStack 和 System.Web 中都存在“IHttpHandler”类型

问题描述

我继承了一个遗留的 ASP.NET 应用程序,我需要在它退役时支持它,但我发现某些网站由于以下错误而无法编译:

CS0433:“IHttpHandler”类型存在于“ServiceStack,Version=5.0.0.0,Culture=neutral,PublicKeyToken=null”和“System.Web,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”中

当网站在 Temporary ASP.NET Files 中编译时会发生该错误。由 ASP.NET 在 Default.aspx 页面后面创建的 *.cs 文件中的违规行是:

[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,因为它实现了一个使用 ServiceStack 的 API 的客户端。因此,ServiceStack.dll 在复杂化时最终会出现在 Web 项目的 bin 目录中 - 而 ServiceStack.dll 还包含命名空间和接口 System.Web.IHttpHandler,因此会出现错误。

鉴于对 ServiceStack 的引用不是来自网站的直接引用,我似乎无法成功地对引用进行别名,这样 ServiceStack 接口就不会被引用为全局。无论如何,导致错误的代码都是自动生成的。有没有其他方法可以解决这个问题(除了重写 API 客户端以使用 HttpClient 而不是 ServiceStack 类)?

标签: asp.netservicestack

解决方案


听起来您正在尝试在 ASP.NET Framework 项目中包含适用于 .NET Core 的 ServiceStack.dll 的 .NET Standard 版本。

应该将依赖项重新构建为目标(或多目标)ServiceStack 的 .NET v4.5 构建(未定义此接口),因此在 ASP.NET 项目中仅引用 .NET Framework .dll。ServiceStack 的 .NET Standard 2.0 dll 只能在 ASP.NET Core 应用程序中使用。


推荐阅读