2013-06-21 46 views
1

我對C#編程有點新,我希望得到您的幫助。部署.NET COM dll時,在另一臺計算機上使用時出現問題

快速回顧我必須先做的事情。

我要創建: - 產生幾個.h5文件(HDF5格式)和一個XML文件 一個DLL - 一個WPF觀衆對於那些寫在這些HDF5文件中的圖表。

問題主要在於它們將以一種非常受限制的方式在名爲PanoramaE²的軟件中使用,該軟件基本上管理DLL。例如,它不允許.NET Framework 4(這使我使用框架的3.5版本)。

在全景更多信息:http://uk.codra.net/panorama/panorama-e2-information-system

我使用HDF5DotNet.dll,我在64位編譯爲.NET 3.5,DynamicDataDisplay我的WPF應用程序。

所有我的DLL將被另一臺計算機使用,其中安裝了Panorama,並且Visual Studio不在其中(只有3.5 .NET框架和一些必需的工具)。

什麼問題?

那麼,首先,我的WPF應用程序不是真正的一個,Panorama似乎不支持WPF,只支持Windows窗體,並且只能作爲DLL。這意味着我創建了一個WPF UserControl,並將其嵌入到Windows Form DLL中。

我基本上有2個DLL,一個是WPF控件,另一個是在Winform中使用這個控件。這是我必須在Panorama中集成的最後一個。在我的計算機上,我使用的是編碼器,Panorama能夠正確識別DLL並且沒有問題。

但是,當我嘗試給這些DLL給我的同事,與他沒有安裝Visual Studio的Panorama,它不起作用。經過一些測試後,我發現只有在同一臺計算機上編譯了項目(DLL)才能正常工作。

同樣的問題發生在另一個創建文件的DLL上。正如我所說的,它使用HDF5DotNet.dll,但它似乎沒有正確創建它。我想這是同樣的問題,DLL無法識別。

我試過了。

我以爲可能DLL沒有正確導出。也許沒有給出所引用的DLL或程序集,這些是在同一臺計算機上編譯的。它們是COM DLL,因爲它們在Panorama中使用,我無法正確導出它們。

我試着創建安裝項目,以便他們將與他們的依賴安裝,但我找不到方法。只有DLL被安裝。我試着用DependancyWalker查看我的DLL,並且有一些依賴關係丟失的地方。即使我嘗試手動添加它們,也沒有任何變化。

我也知道regsvr32不能用於.NET DLL,因爲沒有入口點。這就是爲什麼我想到GAC,但我無法設法註冊它們(具有強大的名稱和所有內容),因爲我無法直接生成它們。

所以是的,對於長篇帖子感到抱歉,我試圖解釋我的想法和我實際嘗試做的事情,但是我無法找到一種方法將我的項目交給我的同事,以便他可以使用他們在他的電腦上。

+0

您聽起來非常迷茫,無法爲問題收集足夠有用的證據。顯然你需要供應商的幫助。 –

回答

0

「自我註冊」(RegSvr32,RegAsm或其他)不是Windows Installer最佳實踐。這會將進程依賴關係注入到安裝程序不知道的安裝關鍵路徑中,這些路徑可能會失敗並且無法回滾或卸載。

更好的方法是使用RegAsm/regfile來收集ComVisible程序集的COM元數據,然後將這些註冊表值寫入MSI的註冊表表中。這種方式Windows Installer只需複製DLL並應用註冊表值來註冊組件。這是不太可能打破,可以卸載和修復乾淨。

你如何做到這一點完全取決於你用來創作你的MSI的工具。在WiX中,你會使用Heat來收集這些信息。在InstallShield中,您將.NET ComVisible屬性設置爲True。

最終結果是一樣的。

0

嗨嘗試在命令提示符下,而不是REGSVR32嘗試以下操作:
RegAsm.exe acxMaterialClassificationMerge.dll /codebase」,其中acxMaterialClassificationMerge.dll是您的DLL。你應該在每臺使用dll的電腦上都這樣做。 RegAsm位於C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727

+0

嗨,謝謝你的回答。我看到了很多對regasm.exe的引用。問題是,regasm.exe沒有安裝在這臺特定的計算機上。這個程序是否可以在不安裝Visual Studio的情況下安裝,並且可以在事後卸載? – user2508093

+0

我在我的電腦上試過這個,它告訴我我的DLL不是一個有效的.NET程序集。這有點奇怪,我猜... – user2508093

+0

你使用什麼版本的regasm? 2.0中的那個? – Renier

0

1:在命令提示:計算機

2上安裝第一DOTNET框架版本2或較新的 「RegAsm.exe acxMaterialClassificationMerge.dll /基本代碼」,其中acxMaterialClassificationMerge.dll是您的DLL。你應該在每臺使用dll的電腦上都這樣做。 RegAsm位於C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727。

相關問題