Dynamics CRM の拡張アプリケーションはISV配下にアプリケーションのフォルダを区切ってデプロイすることが推奨されています。通常、ISV配下に作成するフォルダは仮想ディレクトリではないため、dllをどこに配置するのかという問題があります。

Dynamics CRM SDK 4.0.9 のSDKにカスタムWebアプリケーションの配置方法のベストプラクティスがあったので、まとめておきます。またサンプルを紹介します。

ネタ元となったCRM SDKのWebページです。正式な内容はリンク先を参照してください。

- Custom Code Best Practices
http://msdn.microsoft.com/en-us/library/dd548493.aspx

1. カスタムアプリケーションの配置方法

ISV配下の配置するカスタムアプリケーションのdllの配置方法は以下の表の3種類です。

条件 アセンブリの配置場所
ほかのアプリケーションとアセンブリを共有する GAC

Rollup2 をインストールしている。
(2009年7月現在でロールアップは5まで出ています。)

デプロイしたアプリケーションのbinフォルダ。<myapp>がデプロイした拡張アプリケーションとすると、<crmroot>\ISV\<myapp>\binにdllを配置する。

この場合、すべてのASPXページに@Assemblyディレクトブを使用してアセンブリをName属性で参照する必要がある。Name属性で指定するアセンブリには、パスは記述しない。@Assembly ディレクティブについては、http://msdn.microsoft.com/ja-jp/library/d864zc1k(VS.80).aspxを参照。

Rollup2をインストールしていない。

CRMのインストールされたルートのbinフォルダに配置する。ロールアップ2をインストールしている場合は、この方法は推奨されません。

Rollup2をインストールして、アセンブリを拡張アプリケーションのbinフォルダに配置したサンプルは、[Dynamics CRM] ISV ページ拡張カスタムWebアプリケーションを作る に記載しています。

ちなみに、Rollup2をインストールした後も、CRMのルートフォルダ直下のbinフォルダにアセンブリを格納してもとくに問題は発生しません。当然ですが。

2. まとめ

今回は以上です。誤りなどありましたらご連絡下さい。

CRMのSDKのドキュメントは私が普段仕事で参照していた4.0.0と最近参照しだした4.0.9を比較してかなり記述内容が更新・充実されてきています。今回紹介したdllの配置方法やパフォーマンスのベストプラクティスなど、CRM開発ではまった内容が4.0.9では記載されているので日本語版が出て欲しいです。