【问题标题】:Microsoft.CrmSdk.XrmTooling.CoreAssembly with Targetframework .NET 4.5.2 causes NullReference Exception on CrmServiceClient.ExecuteMicrosoft.CrmSdk.XrmTooling.CoreAssembly 与 Targetframework .NET 4.5.2 在 CrmServiceClient.Execute 上导致 NullReference 异常
【发布时间】:2019-01-09 13:55:45
【问题描述】:

我们在面向 .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;
        }
    }

packages.config 中有以下 nuget 包

<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 request),LastCrmError 为

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

只要我将目标框架更改为 4.6.2,它就可以正常工作。问题是我们将此代码托管在 SQL Server 集成服务包中,出于某种原因,在 Windows 2016 上,SSIS 总是回退到 4.5.2 框架。

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

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

【问题讨论】:

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


    【解决方案1】:

    从版本 9 开始,Dynamics 365 is enforcing TLS 1.2 并且由于 .NET 4.5 默认使用 TLS 1.1,您会收到此错误。 在上一篇文章中,您会发现客户端应用程序的解决方案是您已经尝试过的:

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

    有一些关于如何从 SSIS 包(herehere)强制实施 TLS 1.2 的文章,但遗憾的是我还没有尝试过。如果这些都没有帮助,您可以通过将SchUseStrongCrypto 注册表设置更新为 DWORD:00000001 来解决该错误,如here 所述(为依赖组件启用 TLS 1.2/更新 .NET Framework 部分)。

    【讨论】:

    • 天哪,这听起来像个问题。我会尽快尝试。
    • 我可以确认这在设置 reg 键时有效:johnlouros.com/blog/…
    【解决方案2】:

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

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

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

    谢谢

    【讨论】:

    • 已经在 app.config 中有这个,但没有运气。您收到 Dynamics 365 的回复了吗?您在哪个 Windows 版本上运行?
    • 版本 1710 (9.1.0.1118)
    • 另外请检查您的连接对象(conn)是否为空?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 2013-12-15
    相关资源
    最近更新 更多