Newtonsoft.Json de référence se plaindre sur Azure Fonctions
Je suis à court d'Azur, Fonctions,SmsWebhook
. Il appelle une méthode externe dans une assemblée, AzureFunctionsSample.Services.dll
qui a une référence à Newtonsoft.Json 8.0.3
Les détails de mon Run.csx
ressemble:
#r "AzureFunctionsSample.Services.dll"
using System.Net;
using AzureFunctionsSample.Services
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
...
}
Dans le Run()
méthode ci-dessus, je crée une instance et d'appel d'une méthode dans l'instance. Cependant, chaque fois que j'appelle cette méthode, j'ai l'erreur suivante:
2016-05-19T13:41:45 Welcome, you are now connected to log-streaming service.
2016-05-19T13:41:46.878 Function started (Id=64fccf0c-d0ef-45ef-ac1c-7736adc94566)
2016-05-19T13:41:46.878 C# HTTP trigger function processed a request. RequestUri=https://ase-dev-fn-demo.azurewebsites.net/api/smswebhook
2016-05-19T13:41:46.878 Function completed (Failure, Id=64fccf0c-d0ef-45ef-ac1c-7736adc94566)
2016-05-19T13:41:46.894 Exception while executing function: Functions.SmsWebhook. Microsoft.Azure.WebJobs.Script: One or more errors occurred. AzureFunctionsSample.Services: Could not load file or assembly 'Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040).
J'ai ajouté manuellement de la même version de Newtonsoft.Json.dll
en vertu de la bin
répertoire, mais toujours eu la même erreur. Pourquoi est-il plaint à la Newtonsoft.Json.dll
fichier?
Si je déplace toutes les logiques à l'intérieur de l'assembly externe dans le Run.csx
, elle ne va pas se plaindre, par la voie.
- Par curiosité, pourriez-vous ajouter la directive suivante avant votre assemblée de référence: #r "Newtonsoft.Json.dll" et réessayer?
Vous devez vous connecter pour publier un commentaire.
@JustInChronicles, je suis en ajoutant ce là une réponse à la référence, mais le comportement attendu devrait être que les dépendances de privé assemblages sont résolus, à partir de votre
bin
dossier, comme prévu.J'ai mis en place le test suivant pour reproduire votre scénario:
#r "DependencyWithJsonRef.dll"
et renvoie le résultat produit par la méthode mentionnée ci-dessusDependencyWithJsonRef.dll
etNewtonsoft.Json.dll
(8.0.3) à ma fonction debin
dossierL'invocation de la fonction produit le résultat attendu.
Ici est la fonction, pour référence:
Comme vous pouvez le voir, aucune référence explicite à indirects dépendances (Json.NET) requis.
C'est le résultat que j'obtiens:
Rapide remarque: Une chose que vous voudrez peut-être vérifier, surtout si vous avez mis à jour que la dépendance, tout en développant votre fonction est que la résolution de l'assemblée les résultats n'ont pas mis en cache. Un moyen sûr pour s'assurer que vous commencez avec une ardoise propre est d' (après le déploiement de votre fonction et assemblées) aller à Kudu et de tuer les non-scm processus w3wp pour voir si cela aide. Je serais curieux de savoir si ce n'est le truc qu'il y a quelques choses que nous pouvons pour améliorer ce si elle n'.
#r "Newtonsoft.Json.dll"
, mais#r "Newtonsoft.Json"
était assez, si j'ai besoin de l'utiliser dans lerun.csx
fichier. Si je n'ai pas besoin d'elle, la référence n'était pas nécessaire.Newtonsoft.Json.dll
assemblée dans lebin
répertoire, il obtient une erreur. Je suis toujours curieux, pourquoi je devrais avoir de l'assemblée, même si c'est déjà en interne référencée.Json.Net peut être simplement référence à l'ajout de cette ligne en haut de votre
Run.csx
fichier :Consultez cet article si vous voulez savoir les assemblys qui sont automatiquement ajoutés par l'Azur des Fonctions de l'environnement d'hébergement:
Sinon, si vous souhaitez utiliser une version spécifique de Json.Net, vous devrez probablement ajouter une référence à Json.Net à l'aide du package nuget:
Si vous avez besoin d'ajouter un Projet.fichier json qui ressemblent à ceci:
Si votre dépendance externe références
Newtonsoft.Json
sans l'aide d'un package nuget, vous pouvez jeter un oeil à ce post qui explique comment télécharger vos fichiers binaires:#r "Newtonsoft.Json"
etusing Newtonsoft.Json;
dans monrun.csx
fichier, même si elles ne sont pas directement utilisés dans le fichier. J'ai également ajoutéproject.json
avec le NuGet de référence comme vous l'avez suggéré, mais cela ne m'aide pas.#r "Newtonsoft.Json.dll"
et ne fonctionne toujours pas. Cependant, il semble que j'ai trouvé qu'ici, le problème que j'ai.Après quelques essais et d'erreurs. J'ai trouvé que le problème était là.
@FabioCavalcante m'a donné un indice à l'aide d'un fichier de la base de référence,
Il ne fonctionne pas réellement. J'ai copié ces quatre fichiers Azure Fonctions'
bin
répertoire:AzureFunctionsSample.Services.dll
AzureFunctionsSample.Services.pdb
Newtonsoft.Json.dll
Newtonsoft.Json.xml
- Il encore m'a donné la même erreur, même si je n'ai que le fichier de la base de référence. Puis, j'ai trouvé un autre fichier,
AzureFunctionsSample.Services.dll.config
qui définit réellement l'assemblée de liaison des redirections comme:Après j'ai copié ce fichier de configuration à l'Azur des Fonctions de
bin
répertoire, il a travaillé!Les Leçons Apprises
Newtonsoft.Json
,#r "Newtonsoft.Json.dll"
, si votre assemblée a également une référence à elle.bin
répertoire.Corrigez-moi si je suis toujours mal.
Acclamations,
#r "Newtonsoft.Json.dll"
(ou nom) ne devrait pas être nécessaire à tous.Could not load file or assembly 'log4net, Version=1.2.15.0
? Tout endroit où je peux ajouter la liaison des redirections?