我已按照此链接中的步骤操作,并创建了一个插件: 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 上下文中)
有什么想法吗?
答案 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);
}
};