Shared Projects и плагины CRM
Начиная с 2015 версии в Visual Studio появилась новая функция – Shared Projects. Как понятно из названия, предназначена она для написания кода совместно используемого в различных проектах. И данная функция будет очень полезна при разработке плагинов и кастомных БП в CRM. Как Вы знаете, добавить ссылки на другие библиотеки в плагинах CRM можно только двумя способами: разместить эту стороннюю сборку в GAC’е, либо смёрджить их в одну сборку с помощью утилиты ILMerge.
Теперь у нас есть третий вариант: Вы можете создать одну библиотеку с общими методами в Shared Projects и ссылаться на них в Ваших плагинах. А после компиляции Visual Studio самостоятельно поместить все этим методы в одну сборку с плагином.
Посмотрим как это сделать:
- Создайте новый проект Shared Projects. Добавьте в него новый класс с таким кодом:
using Microsoft.Crm.Sdk.Messages; using Microsoft.Xrm.Sdk; namespace CRM.Common { public static class Utils { public static string Version (IOrganizationService service) { RetrieveVersionRequest versionRequest = new RetrieveVersionRequest(); RetrieveVersionResponse versionResponse = (RetrieveVersionResponse)service.Execute(versionRequest); string version = versionResponse.Version; return version; } } }
Здесь у нас один единственный метод, который принимает Organization Service, выполняет запрос в CRM и возвращает номер версии CRM.
- Добавьте в решение еще один проект – Class Library – для нашего плагина.
- Добавьте в него ссылки на библиотеки CRM, а также на созданный ранее Shared Projects.
- Поместите в него такой код:
using System; using Microsoft.Xrm.Sdk; using static CRM.Common.Utils; namespace CRM.MyPlg { public class MyPlg : IPlugin { public void Execute(IServiceProvider serviceProvider) { IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); string version = Version(service); throw new InvalidPluginExecutionException(version); } } }
Тут у нас происходит вызов метода из Shared Projects и вывод полученного ответа в Exception.
- Скомпилируйте и зарегистрируйте плагин в CRM.
З.Ы. Shared Projects доступны и для Visual Studio 2013, но как отдельное дополнение, которое Вы можете скачать отсюда: https://marketplace.visualstudio.com/items?itemName=KieranMockfordMSFT.SharedProjectReferenceManager
Рекомендую сделать ещё одну ремарку к статье, что Shared Projects ни разу не заменяют ИЛмердж или ГАК в случае с плагинами.
http://axforum.info/forums/showthread.php?t=75855