2010-10-20 46 views
3

由於在MS CRM中存儲插件的建議方式是通過CRM數據庫,因此我認爲是時候對我目前使用的方法做些什麼了,將DLL存儲在磁盤上。創建一個單獨的CRM插件DLL以存儲在CRM數據庫中

但問題是我不知道如何嵌入DLL所需的所有其他各種位:本地化資源文件(保存在另一個文件夾中)和一些來自最新SDK的引用DLL(必須手動放置在bin \ assembly文件夾中)。在這一點上,我甚至不完全確定這是可能的。

到目前爲止,我試圖通過將資源文件上的構建操作更改爲「內容」或「資源」來解決本地化問題,並測試了此解決方案(仍保留位置在磁盤上,但沒有添加本地化夾)。這不起作用:當我在其中一個插件中故意生成驗證錯誤時,儘管在CRM中選擇了不同的語言,但仍然得到了默認語言消息(英文)。

當我嘗試添加一些引用的DLL文件(即新的SDK DLL:xrm.portal,xrm.portal.files和xrm.client)時,我遇到了類似的問題。當我試圖在數據庫中存儲插件(跳過一段時間的本地化問題)時,我得到了一個CRM錯誤,說它找不到XRM.Client程序集或它的一個依賴項。我知道我可以用ILMerge把整個事情放在一起,但我有一種直覺告訴我這不是一個好主意。

關於這個問題的任何提示或建議都會很棒。

回答

6

我們總是ILMerge插件,並沒有問題。我們不會在SDK dll中合併,因爲那些已經在目標服務器上被GACed了。

雖然我們並不真正在我們的插件dll中進行本地化,但我認爲您可能需要做的是,如果您當前的資源管理器是基於文件的,使其基於程序集並僅加載必要的資源從那。

+0

作爲一項後續工作,NuGet ILMerge軟件包使其更加簡單。不再編輯後期構建任務,它只是合併構建結果中的所有內容。只要確保將CRM SDK DLL標記爲不被複制到輸出文件夾即可。 – Matt 2016-02-24 16:01:49

0

我有一套幫助程序捆綁在一個外部程序集中,用於我的大部分實現。我會將其部署到bin文件夾並將其保留。我從來沒有嘗試過ILMerge,但它看起來像一個有趣的概念。

-1

只需將DLL文件放入文件夾CRMWeb \ Bin

+1

雖然可能,但這是一個可怕的解決方案。對於CRM 4.0(最初創建該問題的原因)有點不那麼重要,因爲擴展可以非常好地使用ISV文件夾(因此部署文件正式成立),這對任何較新的CRM版本都是非常糟糕的。 – Shaamaan 2016-02-23 08:17:17