2010-10-20 44 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