为MS Dynamics CRM部署插件 - 缺少程序集

时间:2011-02-01 15:47:54

标签: plugins assemblies dynamics-crm dynamics-crm-4

我已按照此链接中的步骤操作,并创建了一个插件: http://msdn.microsoft.com/en-us/library/bb955365.aspx

我已在我的某个实体的Retrieve消息上注册了它,但是当它触发时我收到此错误:

  

Web服务插件失败了   OrganizationId:   a2dcffbc-e056-4971-ADFB-662979139800;   SdkMessageProcessingStepId:   5b6921b8-192e-e011-846c-001d0928c4ac;   EntityName:new_csvproiect;阶段:50;   MessageName:检索;的AssemblyName:   MSDynCRMPlugin.Plugin,MSDynCRMPlugin,   版本= 1.0.0.0,文化=中立,   公钥= a6a43dc7a3dcc61d;   ClassName:MSDynCRMPlugin.Plugin;

     

异常:未处理的异常:   System.IO.FileNotFoundException:可以   不加载文件或程序集   'System.Web.Services,Version = 4.0.0.0,   文化=中性,   PublicKeyToken = b03f5f7f11d50a3a'或   其中一个依赖项。系统   找不到指定的文件。在   MSDynCRMPlugin.Plugin.Execute(IPluginExecutionContext   上下文)   Microsoft.Crm.Extensibility.PluginStep.Execute(PipelineExecutionContext   上下文中)

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

确保将插件项目设置为针对.NET 4框架,而不是.NET 4 Client Profile框架。使用Visual Studio 2010,新项目的默认设置似乎是.NET 4 Client Profile。

我认为对System.Web.Services的引用将在.NET 4 Client Profile下编译,但在运行时实际上无法执行。

答案 1 :(得分:0)

您需要将外部程序集合并到插件dll中。以下是您应遵循的说明:Using ILMerge with CRM Plugin Assemblies

答案 2 :(得分:0)

使用此代码:

AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
        {
            String resourceName = "AssemblyLoadingAndReflection." + new AssemblyName(args.Name).Name + ".dll";

            using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
            {
                Byte[] assemblyData = new Byte[stream.Length];

                stream.Read(assemblyData, 0, assemblyData.Length);

                return Assembly.Load(assemblyData);
            }
        };