C# 类库项目中的扩展方法
我已经实现了一些扩展方法,并将它们放在单独的类库项目中 假设我在类库中有一个简单的扩展方法,名为C# 类库项目中的扩展方法,c#,asp.net,extension-methods,class-library,C#,Asp.net,Extension Methods,Class Library,我已经实现了一些扩展方法,并将它们放在单独的类库项目中 假设我在类库中有一个简单的扩展方法,名为MD.Utility: namespace MD.Utility { public static class ExtenMethods { public static bool IsValidEmailAddress(this string s) { Regex regex = new Regex(@"^[\w-\.]+
MD.Utility
:
namespace MD.Utility
{
public static class ExtenMethods
{
public static bool IsValidEmailAddress(this string s)
{
Regex regex = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
return regex.IsMatch(s);
}
}
}
但是在web应用程序中的app\u code
文件夹或WebFroms代码隐藏页面中,我都不能使用此扩展方法。如果我这样做:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MD.Utility;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string email = "Someone@Somewhere.com";
if (email.IsValidEmailAddress())
{
//To do
}
}
}
编译器无法识别IsValidEmailAddress()
,甚至没有IntelliSense支持
如果我将扩展方法放在
App\u code
文件夹中,它可以在App\u code
文件夹中的另一个.cs
文件或WebForms代码隐藏页面中使用。您记得在web项目中添加对类库的引用吗
你会需要的。除此之外,您的代码看起来不错,应该可以正常工作。如果在执行解决方案重建时未重新编译更改,则可能是您正在使用的引用类型。如果MD实用工具项目在Web项目解决方案中,则应将引用作为“项目引用”。这将导致生成将代码视为依赖项,因此在更改某些内容时将其重新构建。如果只将其作为DLL,那么DLL被认为是外部的,并且构建不会考虑它,即使它在同一个解决方案中。 我通过公开扩展模块解决了这个问题。 这篇文章可能会有帮助:
除了将程序集添加到引用中,对我来说,修复它的方法是显式地将其添加到文件“using MD.Utility”。我发现,如果使用项目的程序集名称和命名空间相同,并且公共库具有相同的命名空间,则可能会发生这种情况 似乎编译器被搞糊涂了。试着改变它们
如其他地方所述,您需要将公共库添加到每个消费项目中。公共库中包含扩展名的模块必须标记为
Public
。与类不同,Public
不是模块的默认范围。不知道为什么。有一个对类库项目的引用,但我不知道为什么在我重建解决方案时Dll不更新,如果我再次尝试添加引用,它会提示已经有引用,当你说它应该可以工作时,我删除了Dll并再次添加引用,结果成功了。谢谢,德里斯。你知道为什么我的Dll不会自动更新吗?听起来很奇怪。要检查的另一件事是,项目已设置为针对当前生成配置生成。在工具栏上有一个用于在配置(调试、发布)之间切换的下拉列表。该下拉列表中的最后一个元素将弹出一个对话框,您可以在其中选择或取消选择要在各种生成配置中生成的项目。@Mostafa,您可能正在将库DLL生成到与您引用的目录不同的目录中。是的,它必须是公共的。奇怪的是,这不是默认值。谢谢你帮我解决了这个问题。将.NET Core 3.1与C#一起使用。我必须将\@using添加到模板中才能使用IsAjax()方法。原谅我的过错,我将在这里发布代码:\@inject Microsoft.AspNetCore.Http.ihttppcontextaccessor HttpContextAccessor\@使用Midas.Extensions\@if(HttpContextAccessor.HttpContext.Request.IsAjax()){仅在使用Midas.Extensions之后工作;}