错误:无法加载文件或程序集“Interop.ActiveDs”

3

我正在使用C#进行一些Active Directory工作,但我的页面上出现了以下错误:

System.IO.FileNotFoundException: Could not load file or assembly 'Interop.ActiveDs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=46db4b78e98e1c9d' or one of its dependencies. The system cannot find the file specified.

出现了与添加的ActiveDS引用有关的问题。我的机器是64位的,运行的服务器也是x64。

我添加了ActiveDS引用,以便可以执行类似以下操作:

newRoleGroup.Properties["groupType"].Value = ActiveDs.ADS_GROUP_TYPE_ENUM.ADS_GROUP_TYPE_UNIVERSAL_GROUP;

所以我的问题是,为什么它不能加载ActiveDs引用?

3
知道了,你不需要在主题前面加上“ASP.NET C#”。我们在[SO]上有标签,使用标签更好。 - John Saunders
3个回答

5
尝试这样做:

1)将C:\Windows\SysWOW64\ActiveDs.dll文件及其对应的ActiveDs.tlb文件复制到你的解决方案中的某个文件夹中,可以称之为外部引用文件夹

2)从你的项目中删除对ActiveDs的引用

3)添加一个新的引用,但这一次不要选择COM版本,而是选择TLB版本。Visual Studio会为你创建Intero包装器。


试过了...如果服务器是64位的,我为什么要这样做呢? - abney317
一些旧的组件是为32位环境设计的,无法在64位环境下工作。我以前遇到过这个问题几次,只是没有遇到过这个组件。 - James Johnson
Visual Studio是否正在创建Interop DLL?将DLL复制到BIN文件夹中,并使用Copy Local设置为true删除并重新添加引用。重新添加引用后,请确保BIN文件夹中存在DLL和Interop DLL,然后再次尝试。 - James Johnson
Interop DLL在bin\Release中 - 我应该将DLL的副本放在同一位置或上面,就在bin中。 - abney317
尝试将它们放在同一个文件夹中。 - James Johnson

3

如果您在代码中声明正确的常量,而不是引用COM库,那么效果会更好,例如:

enum  ADS_GROUP_TYPE_ENUM {
  public long ADS_GROUP_TYPE_GLOBAL_GROUP = 0x00000002,
  public long ADS_GROUP_TYPE_DOMAIN_LOCAL_GROUP   = 0x00000004,
  public long ADS_GROUP_TYPE_LOCAL_GROUP          = 0x00000004,
  public long ADS_GROUP_TYPE_UNIVERSAL_GROUP      = 0x00000008,
  public long ADS_GROUP_TYPE_SECURITY_ENABLED     = 0x80000000
}

-2

我创建了一个类似于Brian Desmond答案的枚举:

private enum GroupType : uint
{
    UniversalGroup = 0x8,
    DomainLocalGroup = 0x4,
    GlobalGroup = 0x2,
    SecurityGroup = 0x80000000
}

并且像这样检查通用组和安全组:

private const int UniversalSecurityGroup = unchecked((int)(GroupType.UniversalGroup | GroupType.SecurityGroup));

4
你刚刚按照 @BrianDesmond 说的做了。你应该接受他的答案。-1 - jgauffin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接