2012-12-10 59 views
0

我有一個安裝有應用程序的託管代碼.dll自定義操作的InstallShield 2010基本MSI安裝。如果我使用.Net 3.5構建自定義動作,但如果使用4.0構建它,它將失敗。自定義操作的CLR版本

我在手冊中看到了設置CLR版本的參考,但我對如何在MSI中實際做到這一點感到茫然。

所有幫助表示讚賞。

T.

編輯1:

我跑了一個運行CA建立與.NET版本4的簡單微星,這裏有一些有趣的東西挑出來的日誌:

物業(S):RedirectedDllSupport = 2

屬性(S):MsiWin32AssemblySupport = 5.1.2600.5512

屬性(S):MsiNetAssemblySupport = 4.0.30319.1

....

MSI(C)(℃:10)[12:12:15:689]:連接到用於CA接口服務。

的InstallShield:加載CLR成功

的InstallShield:裝載組件[#v4.dll]

的InstallShield:解決組件的FileKey [#v4.dll]。

的InstallShield: - 解析爲C:\ Program Files文件\我的公司名稱\我的產品名稱\ V4.dll

的InstallShield:從路徑C裝載組件:\ Program Files文件\我的公司名稱\我的產品名稱\ V4.dll

InstallShield:無法加載託管自定義操作程序集[#v4.dll]:無法加載文件或程序集文件:/// C:\ Program Files \ My公司名稱\我的產品名稱\ V4 .dll'或其依賴項之一。此程序集由比當前加載的運行時更新的運行時構建,無法加載。

行動結束12:12:15:v4Test。返回值3

....

回答

0

我無法使用InstallShield中的「託管裝配」進行此項工作。我仍然在使用InstallShield進行安裝,但我使用的是WiX DTF(部署工具基礎)自定義操作,並且它在各個版本之間運行良好。

1

在支持公共語言運行時組件的系統中,Windows安裝程序設置MsiNetAssemblySupport property到用戶的計算機上的.NET Framework版本的最新版本。您可以檢查該版本的MsiNetAssemblySupport屬性,然後在CA需要時安裝更高版本。

+0

感謝您的幫助。它仍然不起作用。我使用日誌運行安裝程序,並且MsiNetAssemblySupport屬性將其值顯示爲4.0.30319.1。我已經爲問題添加了一些日誌詳細信息。 – tzerb

+0

此自定義操作是否嘗試使用[Isolated Components](http://msdn.microsoft.com/en-US/Library/Windows/Desktop/eb5f7088-30e0-4644-813a-c93e6f56ccbf)?我看到[RedirectedDLLSupport](http://msdn.microsoft。com/En-US/Library/Windows/Desktop/703489c4-cac4-442c-bd96-d3927491a864)已被設置。可能缺少必需的依賴關係。 –

+0

根本沒有依賴關係。這是一個簡單的類,有一個公共方法: class CA {public int Execute(string s,string t){return 55; }}; 我不認爲我做了任何設置RedirectedDLLSupport。我仍在查找這個和孤立組件的線索。 感謝您的幫助! – tzerb