部署.NET COM dll时,在另一台计算机上使用时会出现问题

时间:2013-06-21 10:34:22

标签: c# .net dll com windows-installer

我对C#编程很陌生,我希望你得到一些帮助。

快速回顾一下我必须先做的事情。

我必须创建: - 一个生成多个.h5文件(HDF5格式)和一个xml文件的DLL - 用于以这些HDF5文件编写的图形的WPF查看器。

问题主要在于它们将被用于名为PanoramaE²的软件中,该软件基本上以非常严格的方式管理DLL。例如,它不允许.NET framework 4(这使我使用3.5版本的框架)。

有关Panorama的更多信息:http://uk.codra.net/panorama/panorama-e2-information-system

我正在使用HDF5DotNet.dll,我在x64 for .NET 3.5中编译,而DynamicDataDisplay用于我的WPF应用程序。

所有我的DLL将被另一台安装了Panorama的计算机使用,而Visual Studio则不会使用(只有3.5 .NET框架和一些必需的工具)。

有什么问题?

嗯,首先,我的WPF应用程序并不是真的,Panorama似乎不支持WPF,只支持Windows Forms,而且只支持DLL。这意味着我创建了一个WPF UserControl,我将其嵌入到Windows窗体DLL中。

我基本上有2个DLL,一个是WPF控件,另一个在winform中使用这个控件。这是我必须在Panorama中集成的最后一个。在我正在编码的计算机上,Panorama正确识别DLL并且没有问题。

但是当我尝试将这些DLL提供给我的同事时,他的Panorama没有安装Visual Studio,它不起作用。经过一些测试后,我注意到只有在同一台计算机上编译了项目(DLL)时它才有效。

同样的问题出现在另一个DLL上,即创建文件的DLL。正如我所说,它使用HDF5DotNet.dll,但似乎它没有正确创建它。我想这是同样的问题,DLL无法识别。

我尝试了什么。

我认为可能没有正确导出DLL。也许没有给出引用的DLL或程序集,这些是在同一台计算机上编译时。它们是COM DLL,因为它们在Panorama中使用,我无法正确导出它们。

我尝试创建安装项目,以便安装它们的依赖项,但我找不到方法。仅安装了DLL。我尝试使用DependancyWalker查看我的DLL,并且有些地方缺少依赖项。即使我尝试手动添加它们,也没有任何变化。

我也知道regsvr32不能与.NET DLL一起使用,因为没有入口点。这就是我考虑GAC的原因,但是我无法注册它们(具有强名称和所有内容),因为我无法直接生成它们。

所以是的,对不起这篇长篇文章,我试着解释一下我的思路和实际尝试的内容,但是我找不到办法把我的项目交给我的同事这样他就可以了在他的电脑上使用它们。

3 个答案:

答案 0 :(得分:0)

您可以在命令提示符下尝试以下命令而不是regsvr32尝试以下操作:
         “RegAsm.exe acxMaterialClassificationMerge.dll /codebase”其中acxMaterialClassificationMerge.dll是你的dll。你应该在将要使用dll的每台电脑上执行此操作。 RegAsm位于C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727

答案 1 :(得分:0)

“自我注册”(无论是RegSvr32,RegAsm还是其他)不是Windows Installer最佳实践。这会将进程外的依赖关系注入安装程序不知道的安装关键路径,这可能会失败,无法回滚或卸载。

更好的方法是使用RegAsm / regfile来获取ComVisible程序集的COM元数据,然后将这些注册表值编写到MSI的Registry表中。这样,Windows Installer只需复制DLL并应用注册表值来注册组件。它不太可能破坏,可以干净地卸载和修复。

这完全取决于您用来创作MSI的工具。在WiX中,你会使用Heat来收集这些信息。在InstallShield中,您将.NET ComVisible属性设置为True。

最终结果是一样的。

答案 2 :(得分:0)

1:在计算机上安装第一个dotnet框架版本2或更新版本


2:在命令提示符下:" RegAsm.exe acxMaterialClassificationMerge.dll / codebase"其中acxMaterialClassificationMerge.dll是你的DLL。你应该在将要使用dll的每台电脑上执行此操作。 RegAsm位于C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727中。

相关问题