5

我已经实现了一些扩展方法并将它们放在单独的类库项目中。

想象一下,我在类库中有一个像这样的简单扩展方法,名为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_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_Code文件夹中,则它可以在.cs文件App_code夹中的其他文件或 WebForms 代码隐藏页面中使用。

4

5 回答 5

7

您还记得在 Web 项目中添加对您的类库的引用吗?

你会需要那个。除此之外,您的代码看起来不错,应该可以工作。

于 2010-04-18T15:58:12.917 回答
2

如果在您进行解决方案重建时没有重新编译更改,那么它可能是您正在使用的参考类型。如果 MD.Utility 项目在您的 Web 项目解决方案中,您应该将引用设为“项目引用”。这将导致构建将该代码视为依赖项,因此在您更改某些内容时重新构建它。如果您只是将其作为 DLL 包含,则该 DLL 被视为外部并且构建将不会考虑它,即使它在同一个解决方案中也是如此。

于 2010-04-18T16:18:10.203 回答
0

我能够通过公开扩展模块来解决它。这篇文章可能会有所帮助: 引用程序集中的扩展方法?

于 2013-09-17T10:56:38.773 回答
0

除了将程序集添加到引用之外,对我来说修复它的是将它显式添加到“使用 MD.Utility”的文件中。

于 2017-05-09T16:25:35.797 回答
0

我发现如果使用项目的程序集名称和命名空间相同并且公共库具有相同的命名空间,则可能会发生这种情况。

似乎编译器感到困惑。尝试改变它们。

如其他地方所述,您需要将公共库添加到每个使用项目。并且必须标记包含公共库中扩展的模块Public。与类不同,Public它不是模块的默认范围。不知道为什么。

于 2017-11-07T19:59:39.480 回答