5

CRMオンライントライアルテナントでクライアントのプラグインを作成しています(最新パッチなどがあると仮定しています)。私が思うそこに非常に論争の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); 
      } 
     } 

    } 
} 

これは、問題が拡張方法ではないことを確認するためです。

私の最高の推測(順番に):

  • ソリューション内の一つのプロジェクトは、あなたが古いプラグイン登録ツールを使用している古いSDKのバージョン
  • を使用している.NET Frameworkの4.5
  • でコンパイルされ
+1

それはそれを釘付けにしました。コンパイルされた.Net 4(4.5ではなく)とうまくいきました。ありがとう! – glosrob

0

お客様のサーバー(2008 R2)でCRM 2011オンプレミスと同じ問題が発生しました。幸運なことに、.NET 4.0に戻る必要はありませんでした。手動で4.5をサーバにインストールすることで問題は解決しました。うまくいけば、CRMオンラインはすぐに更新されることを願っています。

関連する問題