编译一个依赖于ActiveX而不注册的C#WinForm

问题描述:

我有一个使用OCX的遗留项目。我必须在我的系统上使用regsvr32注册所述OCX。编译一个依赖于ActiveX而不注册的C#WinForm

现在,我想让詹金斯编译这个项目。不幸的是,在Jenkins服务器中没有OCX,我不想注册它。

有没有办法分发OCX,以便项目可以在Jenkins上编译?我阅读了免注册组件,但似乎是针对运行时请求,我的问题在编译时。

+0

可能您可以使用[tlbimp.exe]生成主互操作程序集(https://docs.microsoft.com/en-us/dotnet/framework/interop/how-to-generate-primary-interop-assemblies-using -tlbimp-exe)并更新引用以使用程序集。看看[这篇文章](https://*.com/q/10700607/3110834)或[this one](https://*.com/q/7498258/3110834)。 –

+0

Jenkins有时会将我视为Java社区发布的病毒,旨在尽可能地让C#程序员的生活更加艰难。您需要运行Aximp.exe,以便获取表单使用的互操作库和AxHost包装器。检查两个DLL到源代码控制。从您的项目中删除两个引用,并将其添加回来,现在使用这些文件。通过验证.csproj不再包含两个“COMReference”元素来仔细检查。你最好检查安装程序或ocx进入源代码控制以及这最小化版本的痛苦。 –

是的 - 这样做的方式就像Reza Aghaei说的那样。

调用tlbimp生成互操作程序集(它不必是主互操作程序集)。然后,而不是在项目中引用ocx,则引用interop dll。

请注意,如果您想运行该项目或使用winforms设计器中的控件,您仍然需要注册ocx。建立从詹金斯建设,这将工作得很好,我们使用这种技术来构建我们的遗留代码。