Я создал приложение Windows Form в C # (.NET 4.6.2).Я использую приведенный ниже фрагмент кода для подключения к Dynamics 365 онлайн:
ClientCredentials clientCredentials = new ClientCredentials();
clientCredentials.UserName.UserName = "XXXXX@XXX.onmicrosoft.com";
clientCredentials.UserName.Password = "XXXXXXXX";
Uri crmURL = new Uri("https://XXXXX.api.crm4.dynamics.com/XRMServices/2011/Organization.svc");
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
using (OrganizationServiceProxy orgaSvcProxy = new OrganizationServiceProxy(crmURL, null, clientCredentials, null))
{
IOrganizationService orgaService = (IOrganizationService)orgaSvcProxy;
if (orgaService != null)
{
Guid userid = ((WhoAmIResponse)orgaService.Execute(new WhoAmIRequest())).UserId;
if (userid != Guid.Empty)
{
MessageBox.Show("Connection established successfully");
}
}
}
Я ссылался на следующие 2 dll в моем проекте VS 2015 (.NET 4.6.2):
- Microsoft.Xrm.Sdk.dll
- Microsoft.Crm.Sdk.Proxy.dll
Все работает нормально, если я запускаю форму Windows из VS IDE или запускаю форму Windowsиспользуя exe-файл.Но если я сливаю exe и вышеупомянутые два dll в один exe-файл, используя ILMERGE , и запускаю форму Windows, используя объединенный exe, то следующая строка кода начинает давать сбой:
OrganizationServiceProxyorgaSvcProxy = new OrganizationServiceProxy (crmURL, null, clientCredentials, null)
Над строкой кода выдается следующая ошибка:
System.NullReferenceException: ссылка на объект не установлена для экземпляраобъекта.по адресу Microsoft.Xrm.Sdk.Client.ServiceMetadataUtility.GetSDKVersionNumberFromAssembly () по адресу Microsoft.Xrm.Sdk.Client.ServiceMetadataUtility.RetrieveServiceEndpointMetadata (тип Контракт * Тип сервиса...ctor (Uri uri, Uri homeRealmUri, ClientCredentials clientCredentials, ClientCredentials deviceCredentials) в Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy..ctor (Uri uri, Uri homeRealmUri, ClientCredentials clientCredentials, клиентские_критерии для взыскательных объектов, устройство для перемещения по клиентскому центру (элемент управления_CCR)отправитель, EventArgs e) в System.Windows.Forms.Control.OnClick (EventArgs e)
в System.Windows.Forms.Button.OnClick (EventArgs e) в System.Windows.Forms.Button.OnMouseUp (MouseEventArgs mevent)в System.Windows.Forms.Control.WmMouseUp (сообщение & m, кнопка MouseButtons, щелчки Int32) в System.Windows.Forms.Control.WndProc (сообщение & m) в System.Windows.Forms.ButtonBase.WndProc (Message & m) в System.Windows.Forms.Button.WndProc (Message & m) в System.Windows.Forms.Control.ControlNativeWindow.OnMessage (Message & m) в System.Windows.Forms.Control.ControlNativeWindow.WndProc (Message & m) вSystem.Windows.Forms.NativeWindow.Callback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Я использовал следующую строку для объединения сборок с использованием ILMERGE:
"$(SolutionDir)ILMERGE/IlMerge.exe" /target:winexe /targetplatform:"v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319" /out:"$(SolutionDir)..\Output\ConnectToCRM.exe" "$(TargetDir)ConnectToCRM.exe" "$(TargetDir)Microsoft.Crm.Sdk.Proxy.dll" "$(TargetDir)Microsoft.Xrm.Sdk.dll"
Может кто-нибудь, пожалуйста, помогите определить проблему здесь.Что является причиной сбоя объединенного exe-файла.