简体   繁体   English

CRM 2011:插件-无法加载文件或程序集“ Microsoft.Xrm.Client”

[英]CRM 2011: Plug-in - Could not load file or assembly 'Microsoft.Xrm.Client'

I am looking to build a fairly simple plug in that calculates the amount of "units" used & remaining. 我希望构建一个相当简单的插件,以计算已用和剩余​​的“单位”数量。 I have two custom entites bc_learninglicences & bc_llbalance , the plug - in fires on create of bc_llbalance and another for update. 我有两个自定义bc_learninglicencesbc_llbalance ,它们是在创建bc_llbalance ,另一个用于更新。

bc_llbalance: Contains
    bc_learninglicense (Look up field on bc_learninglicences / bc_name)
    bc_units (units that are used by this record)

bc_learninglicences: Contains 
    bc_name
    bc_unitsquantity (This is set to the total qty of units)
    bc_unitsused (this needs to inherit the sum of "bc_units" on "bc_llbalance")
    bc_unitsremaining ( simply bc_unitsquantity - bc_unitsused )

Ok so I have included the code which is obviously not finished as I have just been trying to figure out how to get bc_unitsused to inherit the sum... this code builds without error. 好的,所以我包含的代码显然还没有完成,因为我一直在试图弄清楚如何让bc_unitsused继承总和……此代码构建无误。 however CRM errors: 但是CRM错误:

Unexpected exception from plug-in (Execute): LearningLicenses.LearningLicenses: System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Xrm.Client, Version=5.0.9690.2165 插件发生意外异常(执行):LearningLicenses.LearningLicenses:System.IO.FileNotFoundException:无法加载文件或程序集'Microsoft.Xrm.Client,版本= 5.0.9690.2165

I have a short deadline to build this as the system is due to go live soon, however I cannot move forward with this error which I don't understand... 由于系统即将上线,我有一个很短的期限来构建它,但是我无法继续前进,我不明白这个错误...

Either help with error or code/solution will be appreciated at this point as I'm behind on the time frame for this project. 由于我在这个项目的时间框架上落后,因此,无论是关于错误还是代码/解决方案的帮助,都将受到赞赏。

ps I am new to developing for CRM 2011 with only a few weeks/ few projects experience. ps我刚接触CRM 2011,只有几周/很少的项目经验。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Messages;
using System.Text.RegularExpressions;
using System.ServiceModel;

namespace LearningLicenses
{
    public class LearningLicenses : IPlugin
    {

        public void Execute(IServiceProvider serviceProvider)
        {
            try
            {

                // Obtain the execution context from the service provider.
                Microsoft.Xrm.Sdk.IPluginExecutionContext context = (Microsoft.Xrm.Sdk.IPluginExecutionContext)
                    serviceProvider.GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext));

                //Extract the tracing service for use in debugging sandboxed plug-ins.
                ITracingService tracingService =
                    (ITracingService)serviceProvider.GetService(typeof(ITracingService));

                if (context.InputParameters.Contains("Target") &&
                        context.InputParameters["Target"] is Entity)
                 {

                     // Obtain the target entity from the input parmameters.
                     Entity entity = (Entity)context.InputParameters["Target"];

                IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
                IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

                EntityReference a = (EntityReference)entity.Attributes["bc_learninglicense"];// ((EntityReference)targetEntity.Attributes["bc_learninglicense"]).Id;


                if (entity.LogicalName == "bc_llbalance")
                        try
                        {  

                            //fetchxml to get the sum total of estimatedvalue
                            string value_sum = string.Format(@"         
                    <fetch distinct='false' mapping='logical' aggregate='true'> 
                        <entity name='bc_llbalance'>
                            <attribute name='bc_units' alias='units_sum' aggregate='sum' />
                               <filter type='and'>
                                <condition attribute='bc_learninglicense' operator='eq' value='{0}' uiname='' 
                               </filter>
                        </entity>
                    </fetch>", a.Id);

                            FetchExpression fetch = new FetchExpression(value_sum);
                            EntityCollection value_sum_result = service.RetrieveMultiple(fetch);
                            var TotalValue = "";
                            // decimal TotalValue = 0;
                            foreach (var c in value_sum_result.Entities)
                            {
                                TotalValue = ((string)((AliasedValue)c["value_sum"]).Value);
                            }

                            Entity llc = new Entity("bc_learninglicences");
                            llc.Id = a.Id;
                            llc.Attributes.Add("bc_unitsused", TotalValue);

                            service.Update(llc);

                        }
                        catch (FaultException ex)
                        {
                            throw new InvalidPluginExecutionException("An error occurred in the plug-in.", ex);
                        }
                }

            }
            catch (FaultException ex)
            {
                throw new InvalidPluginExecutionException("An error occurred in the plug-in.", ex);
            }
        }
    }
 }



THE ERROR : 

Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: Unexpected exception from plug-in (Execute): LearningLicenses.LearningLicenses: System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Xrm.Client, Version=5.0.9690.2165, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.Detail: 
<OrganizationServiceFault xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/xrm/2011/Contracts">
  <ErrorCode>-2147220956</ErrorCode>
  <ErrorDetails xmlns:d2p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic" />
  <Message>Unexpected exception from plug-in (Execute): LearningLicenses.LearningLicenses: System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Xrm.Client, Version=5.0.9690.2165, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.</Message>
  <Timestamp>2013-01-22T10:09:22.0275105Z</Timestamp>
  <InnerFault i:nil="true" />
  <TraceText>

[LearningLicenses: LearningLicenses.LearningLicenses]
[c1b35170-c563-e211-8c6d-b499bafd5e5b: LearningLicenses.LearningLicenses: Create of bc_llbalance]


</TraceText>
</OrganizationServiceFault>

Microsoft.Xrm.Client is not used by CRM and so is not present in the GAC or anywhere on the CRM server, it is intended to be redistributed with any client applications that require it. CRM不使用Microsoft.Xrm.Client,因此GAC或CRM服务器上的任何位置都不存在Microsoft.Xrm.Client,它打算与需要它的任何客户端应用程序一起重新分发。

It shouldn't need to be referenced in your Plugin assembly at all, so I would remove it and see if any of your code references it. 完全不需要在您的Plugin程序集中引用它,因此我将其删除,然后查看您的代码是否引用了它。 If it does it should be able to be replaced with equivalent code that doesn't use that assembly. 如果是这样,应该可以将其替换为不使用该程序集的等效代码。

有两种方法可以解决此问题,首先,您可能要检查GAC中是否提供了SDK,但是我们在内部使用ILMerge引入了插件所需的所有依赖项。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM