2020年10月31日 星期六

winform 在dll中的usercontrol只能用Any CPU或是x86編譯

 [問題描述]

現在有兩個專案,一個是dll的專案,裡面有usercontrol,
另一個是dll(usercontrol)的測試專案,
兩個編譯平台都是Release x64。
在測試專案winform的designer中,
將dll中的Usercontrol元件拉到form上,
出現「Failed to load toolbox item. It will be removed from the toolbox」,如下圖

dll的編譯設定如下圖


測試專案的編譯設定如下圖


[思考邏輯]
參考資料[1]中有人提到
我才想起來,前一份工作時也遇到一樣的問題。
當時同事就有跟我說,.NET的dll中若有usercontrol,
一定要Any CPU或是x86才可載入windows form。

其實這個問題,不需要使用dll的方式也會發生,
將winform設成x64就會了。
上圖是在winform專案中建立了兩個usercontrol,
兩個拉進Form1中,都會發生相同的錯誤訊息!


[解決方法]
要將編譯平台改成「Any CPU」,
若是有相容x64需求,把x86的勾拿掉即可。







如果dll不允許Any CPU編譯平台為 ,只能使用x64編譯
那就只能用程式碼來加了

至於原因是,[2]
因為visual studio是32位元的應用程式
無法載入x64的元件,所以才會有無法顯示的狀況。




參考資料:

沒有留言:

張貼留言