web-dev-qa-db-fra.com

Microsoft Dynamics 365 SDK Core Assemblies Erreur de portage .NET Core

Lorsque vous essayez d'utiliser Microsoft Dynamics 365 SDK Core Assemblies dans un projet .NET Core 2.0, l'erreur suivante se produit au moment de l'exécution simplement par using Microsoft.Xrm.Sdk:

TypeLoadException: impossible de charger le type 'System.ServiceModel.Description.MetadataConversionError' de l'assembly 'System.ServiceModel, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089'.

Il semble que les assemblys de base (Microsoft.Xrm.Sdk.Client) ne soient tout simplement pas compatibles avec autre chose que ~ net4x.

Existe-t-il un moyen évident de contourner cette erreur ou de charger le WCF System.ServiceModel classe/interfaces nécessaires à Microsoft.Xrm.Sdk dans le contexte de la cible netcoreapp2.0? Est-il possible d'utiliser Microsoft.Windows.Compatibility pour combler l'écart? Il ressemble au pack Microsoft.Windows.Compatibility documentation indique Les classes/interfaces Windows Communication Foundation (WCF) sont "disponibles" . Comment puis-je utiliser le pack de compatibilité pour charger peut-être System.ServiceModel.Description?

Merci pour toute aide que vous pouvez fournir!

13

J'ai essayé toutes les choses possibles et je peux dire que SDK, ServiceModel, etc. ne sont pas compatibles avec le noyau .net et ne le seront jamais, selon plusieurs discussions sur github. Cependant, j'ai pu le faire:

  • Utilisez XrmToolBox et crmsvcutil.exe pour générer des modèles (facultatif)
  • les placer dans le projet netstandard2
  • référence XRM SDK de nuget
  • Le SDK fonctionne sous .net core en partie où les requêtes LINQ et les QueryExpressions brutes sont traduites en sous-classes de OrganizationRequest
  • écrire IOrganizationService personnalisé qui sérialise OrganizationRequests et les envoie à une autre application
  • Une autre application est l'api web .net core qui référence ce projet et le SDK XRM, mais fonctionne sur framework complet sur Windows et exécute les requêtes réelles, sérialise les réponses et les renvoie.

MODIFICATION IMPORTANTE: J'ai découvert que le SDK 2016 ne fonctionne pas de manière fiable dans le noyau .net sur linux pour diverses raisons et j'ai arrêté en 2011 (le package nuget est Microsoft.Xrm.Sdk.2011). Cela fonctionne bien sauf dans un cas: quand vous faites context.AddObject Et passez une entité sans ID. Le SDK repose sur p/invoquant la bibliothèque Windows native pour créer un UUID séquentiel et se bloque sous Linux. Vous pouvez résoudre ce problème en définissant l'ID avant d'appeler .AddObject().

4
Rast