一种方法需要 DLL,而相同的方法不需要

本文关键字:方法 不需要 DLL 一种 | 更新日期: 2023-09-27 18:31:00

我有两种方法可以从Active Directory检索数据。除了两者之间的字符串常量外,它们都是相同的。

从另一个项目调用方法 A 会给出生成错误,并要求我将目录服务.dll添加到该项目,但调用方法 B 不会。

这是为什么呢?

方法一:

    public static string GetUserDisplayName(string username)
    {
        var user = FindUser(username);
        return GetPropertyOrNull(user, "displayName");
    }

方法B:

    public static string GetUserEmailAddress(string username)
    {
        var user = FindUser(username);
        return GetPropertyOrNull(user, "mail").ToLower();
    }

上下文:

    private static SearchResult FindUser(string username)
    {
        var dSearch = GetDirectorySearcher();
        username = username.Split('''').Last().Trim(); //removes domain
        dSearch.Filter = "(&(objectClass=user)(SAMAccountName=" + username + "))";
        dSearch.SearchScope = SearchScope.Subtree;
        var result = dSearch.FindOne();
        return result;
    }
    private static string GetPropertyOrNull(SearchResult searchResult, string propertyName)
    {
        if (searchResult == null) return null;
        if (searchResult.Properties.Contains(propertyName))
        {
            var prop = searchResult.Properties[propertyName][0].ToString();
            return prop;
        }
        return null;
    }

其他项目进行以下调用:

//this line is fine
var submitterEmail = ADUtil.GetUserEmailAddress(submitterUserName);
//this line throws a compiler error. removing it, the project builds
var submitterCN = ADUtil.GetUserDisplayName(submitterUserName);

为什么会这样,我该如何解决它?我想避免在我的其他项目中需要 DLL。

(注意:我也尝试将ToLower()添加到方法 A 中,但无济于事。

一种方法需要 DLL,而相同的方法不需要

我找到了解决方案。方法 A 有一个重载,该重载采用仅存在于该 dll 中的参数。

在下面的代码中,SearchResult来自目录服务 dll。将此方法从公共更改为专用,或更改名称可解决此问题。

    public static string GetUserDisplayName(SearchResult user)
    {
        return GetPropertyOrNull(user, "displayName");
    }
我想

这是有道理的,我想编译器试图解释该命名方法的任何重载。

相关文章: