相关疑难解决方法(0)

COM 互操作、隔离和排除重复引用

我们在我们编写的 C# dll(程序集 A)中使用 Microsoft 提供的 COM DLL(dsofile.dll)。为了避免必须注册 COM dll,我已将对 dsofile.dll 的引用的isolated 属性切换为 true。

这意味着当我们编译 dll 时,Visual Studio 会将 dsofile.dll、Interop.DSOfile.dll 和 Native 清单文件复制到我们解决方案的 bin 文件夹中,并且应用程序可以在不注册 dsofile.dll 的情况下运行。

这种方法在小型测试应用程序中取得了成功。

然而,在实际应用程序中,程序集 A 被我们的一些其他 dll(程序集 B 和程序集 C)和应用程序 EXE 引用。当本机清单文件和互操作 dll 复制到应用程序的 bin 文件夹时,将使用每个文件的不同副本,因为引用第一个 dll 的每个 dll 都会创建自己的副本。

这会导致文件的多个副本在安装项目中显示为引用(即来自程序集 A、B 和 C 以及 EXE 文件夹的 dsofile.dll,来自程序集 A、B 和 C 以及 EXE 文件夹的 Interop.DSOFile.dll, Native.Assembly A.manifest(来自程序集 A、B 和 C 以及 EXE 文件夹)和编译器警告(“两个或多个对象具有相同的目标位置”)。

此外,如果复制到最终文件夹中的清单和互操作 DLL 不是直接来自 Assembly A 文件夹(因为重复文件相互覆盖),则应用程序无法成功加载 COM DLL。

我被迫从安装依赖项中手动排除文件的重复副本,但在重新加载或重建解决方案时它们会重新出现。

谁能提供更好的方法来实现 COM dll …

c# automation com-interop setup-project visual-studio

5
推荐指数
1
解决办法
5425
查看次数