具有Targetframework .NET 4.5.2的Microsoft.CrmSdk.XrmTooling.CoreAssembly在CrmServiceClient.Execute

时间:2019-01-09 13:55:46

标签: c# dynamics-crm .net-4.5 tls1.2 dynamics-365

我们将在面向.NET 4.5.2的普通控制台应用程序中使用以下代码连接到Dynamics 365 CRM。

 private static void Main(string[] args)
    {
        RetrieveAllEntitiesRequest req2 = new RetrieveAllEntitiesRequest();
        req2.EntityFilters = Microsoft.Xrm.Sdk.Metadata.EntityFilters.Entity;

        CrmServiceClient conn = new CrmServiceClient(
            "svccrm@contoso.com",
            CrmServiceClient.MakeSecureString("secret"),
            "EMEA", "contoso",
            useUniqueInstance: true,
            useSsl: true, isOffice365: true);

        try
        {
            //error with target framework 4.5.2
            var resp2 = conn.Execute(req2) as RetrieveAllEntitiesResponse;
        }
        catch
        {
            string lastError = conn.LastCrmError;
        }
    }

以下nuget软件包位于packages.config中

<package id="Microsoft.CrmSdk.CoreAssemblies" version="9.0.2.5" targetFramework="net452" />
<package id="Microsoft.CrmSdk.Deployment" version="9.0.2.4" targetFramework="net452" />
<package id="Microsoft.CrmSdk.Workflow" version="9.0.2.4" targetFramework="net452" />
<package id="Microsoft.CrmSdk.XrmTooling.CoreAssembly" version="9.0.2.7" targetFramework="net452" />
<package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="2.22.302111727" targetFramework="net452" />
<package id="Newtonsoft.Json" version="6.0.8" targetFramework="net452" />

运行此代码时,我在以下位置收到NullReferenceException Microsoft.Xrm.Tooling.Connector.CrmServiceClient.Execute(OrganizationRequest请求),其LastCrmError为

  

无法登录到Dynamics CRM ****************异常-RetrieveAllEntities:从IOrganizationService向CRM执行(RetrieveAllEntities)请求| =>对象引用未设置为对象的实例。

将目标框架更改为4.6.2后,它就可以正常工作。事实是,我们将此代码托管在SQL Server Integration Services程序包中,由于某种原因,在Windows 2016上,SSIS始终会退回到4.5.2框架。

我们也在对此进行调查,但是现在问题仍然存在,是否应该将Microsoft.CrmSdk.XrmTooling.CoreAssembly软件包与4.5.2一起使用(nuget自述文件表示是),或者这是否是SDK中的错误

最新的.NET 4.7.X框架已安装在2016服务器和我的win 10开发人员机器上,而两者都面临相同的问题。

2 个答案:

答案 0 :(得分:1)

自版本9 Dynamics 365 is enforcing TLS 1.2起,由于.NET 4.5使用TLS 1.1作为默认设置,因此您会收到此错误。  在上一篇文章中,您会发现针对客户端应用程序的解决方案是您已经尝试过的解决方案:

  

使用.NET框架 4.6.2 或更高版本重新编译客户端应用程序。

关于如何从SSIS软件包(herehere)实施TLS 1.2的文章很多,但不幸的是我还没有尝试过。如果这些方法没有帮助,则可以通过按照here中所述将SchUseStrongCrypto注册表设置更新为DWORD:00000001来解决该错误(为相关组件启用TLS 1.2 / Update .NET Framework部分)。

答案 1 :(得分:0)

我设法使用4.5.2。成功运行了上面的代码。

检查您的app.config。添加以下标签并尝试。

<startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> </startup>

谢谢