我有 2 种扩展方法:
public static class ExtensionMethods
{
public static string GetClientIpAddress(this HttpRequestBase request)
{
// ...
}
public static string GetClientIpAddress(this HttpRequestMessage request)
{
// ...
}
}
类HttpRequestMessage
位于System.Net.Http
程序集中并且HttpRequestBase
在System.Web
(即在不同程序集中)。该类ExtensionMethods
位于让我们说ProjectA。
该项目编译良好,没有问题。
然后我使用另一个项目的第一种方法GetClientIpAddress(this HttpRequestBase request)
(比如说ProjectB),如下所示:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
var sessionContext = DependencyResolver.Current.GetService<ISessionContext>();
// Call to GetClientIpAddress
sessionContext.ClientIpAddress =
filterContext.HttpContext.Request.GetClientIpAddress();
}
ProjectB 已经引用了System.Web
,但是当我尝试编译它时,它会导致编译器错误:
类型“
System.Net.Http.HttpRequestMessage
”是在未引用的程序集中定义的。您必须添加对程序集“System.Net.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
”的引用。
我不明白的是为什么我要添加对System.Net.Http
.
似乎编译器尝试使用第二种方法GetClientIpAddress(this HttpRequestMessage request)
,这导致缺少对程序集的引用。这是一个错误吗?
当我重命名第一个方法(即摆脱重载)时,一切都编译得很好。