第一次用Developer Express插件開發軟件, 就被吃了一個閉門羹。 開發出來的winform安裝部屬打包后。軟件在目標計算機上無法打開,雙擊后只是閃動一下, 就沒有反應了。這里要提一下目標計算機上以經安裝了(.net framework 3.5)一直折騰了三天,好是崩潰,網上這方面的相關資料又太少了。不過偶然間看到還是有人也有同樣的問題。所了這些相關的論壇,才知道原來是因為dev控件注冊問題。
所以寫這下貼,以方便后來的朋友不走彎路。當然如果還有更好的方法還希望可以賜教。
下面我先說下我用的環境:Developer Express_11.1.6, vs2008, c# winform開發
軟件在開發的電腦上安裝部署一切正常, 是因為Developer Express所調用的程序集以經加入到GAC。C:\Windows\assembly這個文件夾下可以看到。 在目標計算機上,因為沒有下圖這三個dll程序集。知道這個道理后,好吧把本機電腦上如果注冊的同樣到目標計算機上去注冊下。
我的電腦上是用這個register.bat DOS批處理,
內容主要就是把破解的Developer Express_11.1.6 的dll加入到全局程序集緩存。
內容如下
@echo off
gacutil -u DevExpress.Data.v11.1
mkdir %windir%\assembly\GAC_MSIL\DevExpress.Data.v11.1\11.1.6.0__b88d1754d700e49a
copy DevExpress.Data.v11.1.dll %windir%\assembly\GAC_MSIL\DevExpress.Data.v11.1\11.1.6.0__b88d1754d700e49a
gacutil -u DevExpress.Utils.v11.1
mkdir %windir%\assembly\GAC_MSIL\DevExpress.Utils.v11.1\11.1.6.0__b88d1754d700e49a
copy DevExpress.Utils.v11.1.dll %windir%\assembly\GAC_MSIL\DevExpress.Utils.v11.1\11.1.6.0__b88d1754d700e49a
gacutil -u DevExpress.CodeRush.Common
mkdir %windir%\assembly\GAC_MSIL\DevExpress.CodeRush.Common\11.1.6.0__35c9f04b7764aa3d
copy DevExpress.CodeRush.Common.dll %windir%\assembly\GAC_MSIL\DevExpress.CodeRush.Common\11.1.6.0__35c9f04b7764aa3d
REM copy DevExpress.CodeRush.Common.dll "C:\Program Files\DevExpress 2011.1\IDETools\System\DXCore\BIN\DevExpress.CodeRush.Common.dll"
if "[%ProgramFiles(x86)%]" == "[]" (copy DevExpress.CodeRush.Common.dll "%ProgramFiles%\DevExpress 2011.1\IDETools\System\DXCore\BIN\DevExpress.CodeRush.Common.dll") else (copy DevExpress.CodeRush.Common.dll "%ProgramFiles(x86)%\DevExpress 2011.1\IDETools\System\DXCore\BIN\DevExpress.CodeRush.Common.dll")
echo 'OK'
pause
gacutil的用法這里就不說了, 網上很多資料講的很詳細,這里主要說我我是如何讓目標計算機在安裝部署后,在全局程序集內找到供調用的程序集。
我先把
把這上圖這幾個
文件添加到安裝部署里
創建一個文件夾“注冊”把這6個文件添加進去,如下圖。
上面的批處理創建一個快捷方式到
的文件夾里,這里我重命名為“激活”。
這是方便安裝好后進行注冊的。
然后就可以進行打包發布。
如果目標計算機上沒有.net framework 3.5在打包的時候記得一起打包。如下圖:
好拉,開始發布。
好了最后在目標計算機上安裝,安裝完成后在“開始 –> 程序 ->軟件->激活”運行一次。
好拉,再去點下軟件, 看看是不是以經可以用了。
嘿嘿,最后 我還是感覺這總方法不是很好,要手動點下才行。
后來我又對全局程序集進行了一定的了解。總結出來方法2。
方法2:
這里還是要提到上文中的dos批處理,它的主要內容就是把dll引入到全局程序集中,這們多個軟件在運行的時候就可以共同調用這個dll。而我在做開發的時候就是軟件就以經被指向這個全局程序集緩存內的dev控件dll。當然在發布以后目標計算機上因為沒有dev的dll文件,也就無法打開。 所以在做開發的時候只要不去引用全局程序集內的dll就可以解決這個問題。(這里我要感謝一樓的前輩,這是他提出的方案)
好了我下面說一下方法:
先找到dev控制引用的文件路徑C:\Program Files\DevExpress 2011.1\Components\Sources\DevExpress.DLL(我是默認安裝)
把這個文件復制到項目文件里,取名為"dll庫文件"
然后在“解決方案”項目點屬性->引用 如下圖:
把"dll庫文件"文件夾添加到里面。
好了點F6編譯一下, 再看一下引用中的屬性,dev控制引用是不是以經被指向了這個文件夾。
原部屬里的dll(程序集)還是指向原先的路徑。好了,按下面的方法就可以解決。
好了把原部署里的 項目主輸出 刪除,這樣他所有的引用也都跟着消失了。 再把項目主輸出添加進去。看一下自己加載的程序集是不是指向了"dll庫文件"。
好了,到這里以經差不多了。
最后發布吧~
在沒有dev控制的 目標電腦上運行。
我在目標計算機上測試, 這樣確實可以運行了。 不過又會彈出一個對話框 如下圖:
這是因為沒有引用 破解的dll(程序集)造成的。
我就把破解的dll復制到"dll庫文件"從新執行方法2,可是在目標計算機上確又無法打開。 也不知道有什么更好的解決辦法。
我想如果不介意彈出這個對話框可以采用方法2。