CS0433:类型 'IHttpHandler' 存在于 ServiceStack 和 System.Web 中

CS0433: The type 'IHttpHandler' exists in both ServiceStack and System.Web

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

CS0433: The type 'IHttpHandler' exists in both 'ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null' and 'System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'

在临时 ASP.NET 文件中编译网站时出现错误。 Default.aspx 页面后面的 ASP.NET 创建的 *.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 class)?

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

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