簡體   English   中英

部署.NET COM dll,在另一台計算機上使用時出現問題

[英]Deploying .NET COM dlls, issues when used on another computer

我是C#編程的新手,希望您在某些方面有所幫助。

快速回顧一下我首先要做的事情。

我必須創建:-一個生成多個.h5文件(HDF5格式)和一個xml文件的DLL-一個WPF查看器,用於將這些HDF5文件中寫入的圖形。

問題主要是它們將被用在名為PanoramaE²的軟件中,該軟件基本上以非常嚴格的方式來管理DLL。 例如,它不允許使用.NET Framework 4(這使我使用該框架的3.5版本)。

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

我使用的是HDF5DotNet.dll,它是在x64中為.NET 3.5編譯的,而DynamicDataDisplay是為WPF應用程序編寫的。

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

有什么問題 ?

好吧,首先,我的WPF應用程序並不是一個真正的應用程序,Panorama似乎不支持WPF,僅支持Windows窗體,並且僅支持DLL。 這意味着我創建了一個WPF用戶控件,並將其嵌入Windows窗體DLL中。

我基本上有2個DLL,一個是WPF控件,一個在winform中使用此控件。 這是我必須在Panorama中集成的最后一個。 在我正在使用其進行編碼的計算機上,Panorama可以正確識別DLL,並且沒有問題。

但是,當我嘗試將這些DLL提供給我的同事時,如果他的同事沒有安裝Visual Studio, 則它的全景圖將不起作用 經過一些測試,我注意到只有在同一台計算機上編譯了項目(DLL)后,它才起作用

另一個DLL(創建文件的DLL)也遇到了同樣的問題。 如我所說,它使用HDF5DotNet.dll,但似乎無法正確創建它。 我想這是同樣的問題,無法識別DLL。

我試過了

我認為DLL可能沒有正確導出。 也許沒有給出引用的DLL或程序集,這是在同一台計算機上進行編譯時的結果。 它們是COM DLL,因為它們已在Panorama中使用,我無法正確導出它們。

我嘗試創建安裝項目,以便將它們與依賴項一起安裝,但是我找不到辦法。 僅安裝DLL。 我嘗試使用DependancyWalker查看DLL,但有些地方缺少依賴關系。 即使我嘗試手動添加它們,也沒有任何改變。

我也知道regsvr32不適用於.NET DLL,因為沒有入口點。 這就是我考慮GAC的原因,但是我無法設法注冊它們(使用強名和所有內容),因為我無法直接生成它們。

因此,是的,很長的帖子,很抱歉,我試圖解釋我的思路以及我實際上試圖做的事情,但是我無法找到一種方法將項目交給我的同事,以便他可以在他的計算機上使用它們。

嗨,請在命令提示符下嘗試以下命令,而不是regsvr32嘗試以下命令:
RegAsm.exe acxMaterialClassificationMerge.dll /codebase ”,其中acxMaterialClassificationMerge.dll是您的dll。 您應該在要使用dll的每台PC上執行此操作。 RegAsm位於C:\\ Windows \\ Microsoft.NET \\ Framework \\ v2.0.50727

“自注冊”(無論是RegSvr32,RegAsm還是其他)不是Windows Installer最佳實踐。 這會將進程依賴項注入到安裝程序不知道的安裝關鍵路徑中,該路徑可能會失敗,無法回滾或卸載。

更好的方法是使用RegAsm / regfile收集ComVisible程序集的COM元數據,然后將這些注冊表值創作到MSI的Registry表中。 這樣,Windows Installer只需復制DLL並應用注冊表值即可注冊您的組件。 它破裂的可能性小得多,可以干凈地卸載和修復。

確切的方式取決於您用來編寫MSI的工具。 在WiX中,您將使用Heat來收集此信息。 在InstallShield中,您可以將.NET ComVisible屬性設置為True。

最終結果是相同的。

1:在計算機上安裝第一個dotnet Framework版本2或更高版本

2:在命令提示符下:“ RegAsm.exe acxMaterialClassificationMerge.dll / codebase”,其中acxMaterialClassificationMerge.dll是您的dll。 您應該在要使用dll的每台PC上執行此操作。 RegAsm位於C:\\ Windows \\ Microsoft.NET \\ Framework \\ v2.0.50727。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM