如果我們有一些開發人員在64位機器和32位機器上開發某些開發人員,但是我們需要引用非託管程序集,這些程序集需要在x86中才能完成一半的團隊另一半是x64?每當有人在64位平臺上獲取最新版本時,是否還有解決方案,除了手動更新引用?混合.NET開發環境中的非託管x64程序集
回答
你想做這個作爲你的構建的一部分,對吧?
編寫預構建步驟,將引用的DLL從源代碼樹中的永久位置複製到本地項目。使用$(ConfigurationName)或$(PlatformName)宏來選擇哪個版本的非託管DLL實際被複制。您只需將您的DLL保存在單獨的文件夾中,並使用與配置名稱或平臺名稱匹配的名稱。
用x64機器的開發者樂意運行64位版本是很奇怪的。 Visual Studio不支持在x64模式下編輯+繼續,這是相當大的損失。解決方法很簡單,將Platform Target設置爲x86。 Automagically也解決你的非託管DLL問題。
這很奇怪,我會與三隻黑羊討論它,但如果有解決方案,它會更好。我想這是一個很漂亮的案例,但我會繼續尋找。 – PeteK 2009-03-11 16:20:50
還有一種解決方案需要編輯一些代碼。它在從Milan Gardian到this question的回答中被描述。
基本上,它涉及編寫自己的程序集引用處理程序,以確定在運行時加載哪個程序集,前提是您可以訪問程序集的兩個(32位和64位)版本。我剛剛實施了這個解決方案,我的自我,它就像一個魅力。
我的情況是這樣的:
我正在開發一個針對Windows 7 64位「Any CPU」的.NET程序。我添加了32位程序集引用,並將Copy Local設置爲false。我使用生成後事件將32位和64位程序集複製到輸出文件夾,並確保爲32位程序集提供與參考中不同的名稱。這是因爲我想強制我的自定義程序集解析器啓動並執行它的事情,這是由於.NET默認程序集解析器無法解析引用。在運行時正確的程序集被加載,並在編譯時,我沒有得到任何錯誤。應該指出的是,我沒有時間來確認現在是在32位操作系統上工作,但我沒有看到它不應該起作用的任何理由。
- 1. 混合管理/非託管程序集加載順序
- 2. WinDbg - 調試混合x64託管/非託管代碼
- 3. 檢測混合環境中的內存泄漏(託管非託管)
- 4. 混淆vs非託管程序集
- 5. 在混合C++ .NET應用程序中強調託管還是非託管?
- 6. 混合開發環境
- 7. 從非託管代碼加載混合模式程序集
- 8. 混合託管/非託管C++?
- 9. 簽署引用非託管程序集的託管程序集
- 10. Selenium集成開發環境集成開發環境IDE集成開發環境集成開發環境
- 11. 非託管環境中的.NET泛型(C#)(VB6.0)
- 12. 在非託管環境中休眠
- 13. C++/cli中的觀察者模式混合託管/非託管
- 14. DebugBreak的行爲在非託管和混合(非託管+託管)應用程序之間有所不同?
- 15. 如何在C++/CLI中混合使用混合類型(託管和非託管)?
- 16. 經典ADO仍然適用於混合託管/非託管應用程序嗎?
- 17. 允許託管環境中的託管代碼回撥非託管代碼
- 18. .NET的開發環境
- 19. 如何將非託管dll和託管程序集合到一個文件中?
- 20. 託管在非節點環境
- 21. 。混合託管和非託管代碼的問題
- 22. 在託管環境中使用非託管線程有什麼缺點?
- 23. 確定哪個.NET程序集調用非託管代碼
- 24. 引用非託管程序集
- 25. 「完美」.NET開發環境?
- 26. 如何在混合應用程序中執行異常處理? (託管應用程序使用非託管DLL)
- 27. 在混合託管/非託管C++/CLI進程關閉期間線程關閉
- 28. 混合環境中的NServiceBus
- 29. 混合託管和非託管C++代碼?
- 30. 非託管C++ .NET中
實際上,這是在設計時。我們有適用於構建過程的解決方案,但是一些開發人員可以在Debug |中進行編譯64。 – PeteK 2009-03-11 16:21:36