Методы расширения в проекте библиотеки классов - PullRequest
3 голосов
/ 18 апреля 2010

Я реализовал некоторые методы расширения и поместил их в отдельный проект библиотеки классов.

Представьте, что у меня есть простой метод расширения, подобный этому, в библиотеке классов, который называется 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);
        }
    } 
}

Но нигде в WebApp, таком как папка App_code или страница с выделенным кодом WebFroms, я не могу использовать этот метод Extension.Если я делаю так:

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 или веб-формы.

Ответы [ 5 ]

5 голосов
/ 18 апреля 2010

Вы не забыли добавить ссылку на вашу библиотеку классов в веб-проекте?

Тебе это понадобится. Кроме того, ваш код выглядит нормально и должен работать.

2 голосов
/ 18 апреля 2010

Если изменения не перекомпилируются во время перестройки решения, это может быть тип используемой вами ссылки. Если проект MD.Utility входит в ваше решение для веб-проекта, вы должны сделать ссылку «Ссылка на проект». Это заставит сборку рассматривать этот код как зависимость и, следовательно, перестраивать его при изменении чего-либо. Если вы просто включите ее в качестве DLL, то DLL будет считаться внешней, и сборка не будет учитывать ее, даже если она находится в том же решении.

0 голосов
/ 07 ноября 2017

Я обнаружил, что это может произойти, если имя сборки и пространство имен проекта-потребителя совпадают, а общая библиотека имеет одинаковое пространство имен.

Кажется, что компилятор запутался.Попробуйте изменить их.

Как отмечалось в другом месте, вам необходимо добавить общую библиотеку для каждого потребляющего проекта.И Модуль, содержащий Расширение (я) в Общей библиотеке , должен быть помечен Public.В отличие от классов, Public не является областью по умолчанию для модулей.Понятия не имею, почему.

0 голосов
/ 09 мая 2017

В дополнение к добавлению сборки к ссылкам для меня было исправлено явное добавление ее в файл "using MD.Utility".

0 голосов
/ 17 сентября 2013

Мне удалось решить эту проблему, сделав модуль расширения общедоступным. Этот пост может быть полезен: Методы расширения в ссылочных сборках?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...