一种方法需要 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 中,但无济于事。
我找到了解决方案。方法 A 有一个重载,该重载采用仅存在于该 dll 中的参数。
在下面的代码中,SearchResult
来自目录服务 dll。将此方法从公共更改为专用,或更改名称可解决此问题。
public static string GetUserDisplayName(SearchResult user)
{
return GetPropertyOrNull(user, "displayName");
}
我想这是有道理的,我想编译器试图解释该命名方法的任何重载。