好了,所以我试图从Active Directory用户拉入一个DirectoryUser对象,如果我喜欢这种类型,它工作得很好:DirectoryEntry字符串作为文字而不是格式化字符串?
DirectoryEntry user = new DirectoryEntry(@"LDAP://CN=Name, OU=Department, OU=Group, DC=Domain1, DC=Domain2");
user.Properties["thumbnailPhoto"].Clear();
但我需要的价值才能够被改变,所以我尝试了格式化字符串:
string ldap = string.Format("LDAP://CN={0}, OU={1}, OU={2}, DC={3}, DC={4}", cn, group, ou, domain1, domain2);
DirectoryEntry user = new DirectoryEntry(ldap);
user.Properties["thumbnailPhoto"].Clear();
但是,这会导致错误“有在服务器上没有这样的对象”
构造函数的字符串,而我通过,我是完全相同的值使用时,我真的写了,为什么它以一种方式而不是另一种方式工作?!
编辑: 我只是想补充一点,我在几个不同的方式双重检查,以验证内置字符串中走出等同于硬编码字符串,它是。我跑过调试器,并检查user.path值以验证字符串是否存储完全相同。到目前为止,所有东西都是相同的,但一个是有效的,另一个不是!
更新: 我注意到,如果我硬代码直接给一个字符串变量:
string ldap = @"Jeremy Stafford", "IT", "QGT", "QGT", "Local";
DirectoryEntry user = new DirectoryEntry(ldap);
这一切正常。这导致我相信字符串“type”可能有问题。也许如果我可以将构建的字符串转换回原始字符串(或者相对于引用类型而言是一个值类型),它会起作用吗?但我不知道该怎么做。有任何想法吗?
更新: 我运行了语义测试。下面是我使用的代码:
string ldapFormatted = string.Format("LDAP://CN={0}, OU={1}, OU={2}, DC={3}, DC={4}", cn, group, ou, domain1, domain2);
var ldapHardCoded = @"LDAP://CN=Jeremy Stafford, OU=IT, OU=QGT, DC=QGT, DC=Local";
string message;
if (ldapFormatted.Equals(ldapHardCoded))
{
message = "They're the same value\n";
}
else
{
message = "Strings are not the same value\n";
}
if (ldapFormatted.GetType() == ldapHardCoded.GetType())
{
message += "They are the same type";
}
else
{
message += "They are not the same type";
}
message += "\n\n" + ldapFormatted + "\n" + ldapHardCoded;
MessageBox.Show(message);
这里是结果:
道歉,我用它们作为占位符。我已经更新了OP,以显示我通过的实际值。 – Sinaesthetic 2012-02-21 15:46:50
我觉得我应该为我糟糕的打字道歉。 _ /指责technology_ – 2012-02-21 15:49:43
请出示用来初始化变量代码:'CN,组,OU,域1,domain2' – sll 2012-02-21 16:43:25