5

Я пишу плагин для клиента на пробном арендаторе CRM Online (так что предположим, что он имеет последние исправления и т. Д.), И наткнулся на ошибку, которую я раньше не видел. Как правило, не говоря, я всегда использую метод расширения вдоль линий следующего, просто для ясности коды действительно:Методы расширения для онлайн-экземпляров CRM 2011, вызывающих исключения TypeLoad

public static void AddOrUpdate(this Entity e, string propertyName, object value) 
{ 
    if (e.Attributes.Contains(propertyName)) 
    { 
     e.Attributes[propertyName] = value; 
    } 
    else 
    { 
     e.Attributes.Add(propertyName, value); 
    } 
} 

Ничего чрезвычайно спорного там я думаю? Во всяком случае по какой-либо причине, если я включаю файл класса как часть плагин для этого клиента, я получаю следующее сообщение об ошибке бросили:

Unhandled Exception: System.ServiceModel.FaultException`1 
System.TypeLoadException: Microsoft Dynamics CRM has experienced an error. Reference number for administrators or support: #9A0442A7 

[foo.bar.Plugins: foo.bar.Plugins.TrackActivity] 
[6ed535ec-c7a8-e211-858f-3c4a92dbdc37: foo.bar.Plugins.TrackActivity: Create of task] 

Существует никаких следов включен, который показывает плагин даже не выполняется (даже если первая строка кода выбрасывает исключение!).

Я сделал немного копания, и кажется, что для этого клиента/экземпляра по крайней мере: - Если я включаю файл статического класса (public static class Foo) любым способом, я получаю эту ошибку, действительно ли класс используется код или нет - При возникновении ошибки сам плагин не выполняется (исключение возникает перед любым кодом)

Любой, кто-либо видел что-либо подобное раньше или имеет какое-либо представление об System.TypeLoadException исключениях?

ответ

5

Я просто попробовал этот плагин с пробным экземпляром CRM Online (5.0.9690.3358) и работает.

Плагин зарегистрирован в сообщении «Создать сообщение», «Объект задачи», «Предварительная операция», «Синхронный».

using System; 
using Microsoft.Xrm.Sdk; 

namespace TestPlugin 
{ 
    public class MyPlugin : IPlugin 
    { 
     public void Execute(IServiceProvider serviceProvider) 
     { 
      IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); 
      if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) 
      { 
       Entity entity = (Entity)context.InputParameters["Target"]; 
       if (entity.LogicalName != "task") 
        return; 

       try 
       { 
        entity.AddOrUpdate("description", "updated by plugin"); 
       } 
       catch (Exception ex) 
       { 
        throw new InvalidPluginExecutionException(ex.Message); 
       } 
      } 
     } 
    } 

    public static class ExtensionMethods 
    { 
     public static void AddOrUpdate(this Entity e, string propertyName, object value) 
     { 
      if (e.Attributes.Contains(propertyName)) 
      { 
       e.Attributes[propertyName] = value; 
      } 
      else 
      { 
       e.Attributes.Add(propertyName, value); 
      } 
     } 

    } 
} 

Это абсолютно не проблема, а метод расширения.

Моя догадка (в порядке убывания):

  • Один проект в вашем решении скомпилирован с .NET Framework 4.5
  • Вы используете старую версию SDK
  • Вы используете старый плагин Регистрация Инструмент
+1

Да, это прибило его. Скомпилирован против .Net 4 (вместо 4.5), и он прошел нормально. Благодаря! – glosrob

0

У нас была такая же проблема с CRM 2011 На месте на сервере клиента (2008 R2). К счастью, нам не пришлось возвращаться к .NET 4.0 - ручная установка 4.5 на сервер исправила проблему. Надеюсь, CRM онлайн будет обновлен достаточно скоро.