0

我在一个C# 项目上,由于它使用 Sharepoint,我正在使用 MS Server 2008。

该项目在服务器上编译并运行良好,所以我认为是时候进行部署了,并创建了一个由 Visual Studio本身提供的安装程序项目。

当我运行安装程序然后在服务器上运行程序时,它可以完美运行。但是当我在本地机器上这样做时,它说缺少 COM 引用或其他东西。

事实是这个项目确实引用了我公司提供的 Visual Basic DLL,我只是不明白为什么安装程序不会自行复制/注册它。它设法很好地获取了一些其他需要的 DLL 并将其复制到安装文件夹(如 Microsoft.IdentityModel.dll、Microsoft.SharePoint.Client.dll ...)。

关于我应该怎么做才能让它工作的任何提示?我无权访问引用的 DLL 的“复制本地”属性(它是灰色的)。

编辑:一些图片,也许它会有所帮助:

http://hpics.li/2f6acc4

http://hpics.li/86e8b11

http://hpics.li/6697314

编辑2:所以它比我想的要复杂一些。事实上,当我简单地引用原始 DLL(即 GestionClevb6.dll)时,我最终会在我的程序中得到“未注册的类”错误。但是,如果我引用生成的 Interop.GestionClevb6.dll,我会注意到另一个 DLL 被添加到部署项目中(我猜是依赖项)。哦耶。所以我最后有两个 DLL,GestionClevb6.dll 和新的 DLL_Licence.dll,还有一个全新的 bug:“ Exception de HRESULT : 0x800AC352。

4

1 回答 1

2

关于 COM 引用丢失的错误意味着您的项目引用了一个 COM 类,但在您尝试运行该 COM 类未注册的程序的系统上。

您需要在安装过程中让安装程序注册 COM-DLL。它不会自动完成!否则,如果 COM-DLL 尚未注册,您将收到此错误。我想在它工作的服务器上,DLL 之前已经注册过了。

不明白为什么安装程序不会自行复制/注册它。

安装程序如何知道它是一个必须注册的 COM DLL?

它设法很好地获取了一些其他需要的 DLL 并将其复制到安装文件夹(如 Microsoft.IdentityModel.dll、Microsoft.SharePoint.Client.dll ......

这些是您的项目直接引用的托管 DLL。他们不必注册。此外,由于这些是托管引用的 DLL,如果相应地配置了引用的“复制本地”属性,它们将被复制为“项目输出”的一部分。

但是,这不适用于 COM-DLL。COM 引用没有“复制本地”属性,因为它无论如何都无济于事 - 需要注册包含 COM 类的 DLL。单独复制不会注册它们。

于 2014-04-16T10:12:55.167 回答