È possibile includere un file web.config o app.config nella struttura della cartella delle funzioni di Azure per consentire i reindirizzamenti dell'associazione di assiemi?Reindirizzamento binding di funzioni di Azure
risposta
Oggi non è possibile, ma stiamo pensando a come raggiungerlo. Puoi aprire un problema su https://github.com/Azure/azure-webjobs-sdk-script/issues per assicurarti che il tuo scenario specifico sia visto? Grazie!
Supponendo che si sta utilizzando l'ultima (June'17) Visual Studio 2017 Funzione Tooling, ho derivato una soluzione di configurazione basata su un po ', ragionevole per questo a seguito di un frammento di codice inviato da npiasecki
Oltre Issue #992.
Sarebbe ideale se questo fosse gestito attraverso il framework, ma almeno essendo guidato dalla configurazione si ha un po 'più di isolamento dei cambiamenti. Suppongo che potresti anche usare alcuni passi pre-compilazione o un template T4 che riconcilia le versioni degli nugets nel progetto (e le loro dipendenze) prima di scrivere questa configurazione o generare codice.
Così il rovescio della medaglia .... diventa dover ricordare di aggiornare il BindingRedirects
config quando si aggiorna il pacchetto NuGet (questo è spesso un problema in ogni caso app.configs). È inoltre possibile che si verifichi un problema con la soluzione guidata dalla configurazione se è necessario reindirizzare Newtonsoft
.
Nel nostro caso, stavamo utilizzando il nuovo NuGet di Azure Fluent che dipendeva da una versione precedente di Microsoft.IdentityModel.Clients.ActiveDirectory
rispetto alla versione delle normali librerie di gestione ARM che vengono utilizzate affiancate in una particolare funzione.
{
"IsEncrypted": false,
"Values": {
"BindingRedirects": "[ { \"ShortName\": \"Microsoft.IdentityModel.Clients.ActiveDirectory\", \"RedirectToVersion\": \"3.13.9.1126\", \"PublicKeyToken\": \"31bf3856ad364e35\" } ]"
}
}
FunctionUtilities.cs
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Globalization;
using System.Linq;
using System.Reflection;
namespace Rackspace.AzureFunctions
{
public static class FunctionUtilities
{
public class BindingRedirect
{
public string ShortName { get; set; }
public string PublicKeyToken { get; set; }
public string RedirectToVersion { get; set; }
}
public static void ConfigureBindingRedirects()
{
var config = Environment.GetEnvironmentVariable("BindingRedirects");
var redirects = JsonConvert.DeserializeObject<List<BindingRedirect>>(config);
redirects.ForEach(RedirectAssembly);
}
public static void RedirectAssembly(BindingRedirect bindingRedirect)
{
ResolveEventHandler handler = null;
handler = (sender, args) =>
{
var requestedAssembly = new AssemblyName(args.Name);
if (requestedAssembly.Name != bindingRedirect.ShortName)
{
return null;
}
var targetPublicKeyToken = new AssemblyName("x, PublicKeyToken=" + bindingRedirect.PublicKeyToken)
.GetPublicKeyToken();
requestedAssembly.Version = new Version(bindingRedirect.RedirectToVersion);
requestedAssembly.SetPublicKeyToken(targetPublicKeyToken);
requestedAssembly.CultureInfo = CultureInfo.InvariantCulture;
AppDomain.CurrentDomain.AssemblyResolve -= handler;
return Assembly.Load(requestedAssembly);
};
AppDomain.CurrentDomain.AssemblyResolve += handler;
}
}
}
Grazie per questo. Questo è praticamente necessario per la maggior parte dei progetti di nuget. Sperando che lo affrontino presto. – Grapes
Per chi ha difficoltà a fare questo lavoro: Se si ha più di una versione che deve essere rimbalzata, sarà necessario rimuovere la riga AppDomain.CurrentDomain.AssemblyResolve - = handler; Poiché ciò significava che solo la prima versione trovata veniva reindirizzata. – bech
appena pubblicato un nuovo post sul blog che spiega come risolvere il problema, date un'occhiata:
In realtà è una versione ottimizzato del codice del JoeBrockhaus, che funziona bene anche per Newtonsoft.Json.dll
Ispirato alla risposta accettata ho pensato che avrei fatto una più generica che tiene conto gli aggiornamenti pure.
Recupera tutti gli assembly, li ordina in ordine decrescente per ottenere la versione più recente in cima, quindi restituisce la versione più recente al momento della risoluzione. Lo chiamo in un costruttore statico me stesso.
public static void RedirectAssembly()
{
var list = AppDomain.CurrentDomain.GetAssemblies().OrderByDescending(a => a.FullName).Select(a => a.FullName).ToList();
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
{
var requestedAssembly = new AssemblyName(args.Name);
foreach (string asmName in list)
{
if (asmName.StartsWith(requestedAssembly.Name + ","))
{
return Assembly.Load(asmName);
}
}
return null;
};
}
- 1. Assemblaggio binding e reindirizzamento
- 2. Funzioni di Azure e app di logica
- 3. PHP: come evitare le funzioni di reindirizzamento?
- 4. Utilizzare F # in Funzioni di Azure
- 5. Pianificazioni separate per le funzioni di webjob di Azure?
- 6. Memorizzazione dello stato localmente con le funzioni di Azure
- 7. Riferimento Newtonsoft.Json che si lamenta delle funzioni di Azure
- 8. Compilare funzioni di Azure (file .csx) sulla macchina locale
- 9. Il reindirizzamento di autenticazione di Azure AD non utilizza l'url di risposta configurato
- 10. Azure non riescono ad aggiornare i binding del nome host
- 11. C'è qualcosa come Assembly Binding Log Viewer su Windows Azure?
- 12. Lo scopo di Function Binding
- 13. Ottieni binding IIS in fase di esecuzione
- 14. Come definire il binding delle funzioni all'interno del modello GStringTemplateEngine?
- 15. Come si può sovrascrivere il reindirizzamento delle funzioni in bash?
- 16. Errore di binding IPv6
- 17. SLF4J Errore di binding
- 18. Servizio app di Azure e fabric di servizio di Azure
- 19. Utilizzo di WCF su Localhost su Azure
- 20. Azure OpenID Connect tramite OWIN Middleware con conseguente ciclo di reindirizzamento infinito
- 21. Pulsante di reindirizzamento Javascript
- 22. Url di reindirizzamento strip
- 23. Cosa attiva le funzioni di Azure per ricaricare gli assembly di riferimento?
- 24. Funzioni di Azure: è possibile utilizzare le variabili di ambiente in function.json?
- 25. Accedere ai pacchetti di nuget ospitati nel server Nuget privato in Funzioni di Azure
- 26. Come si includono riferimenti a assembly esterni nelle funzioni Azure
- 27. Ruolo web di Azure non avviato nell'emulatore di Azure
- 28. DB di funzione e documento di Azure
- 29. jQuery come eseguire il binding su un binding di dati?
- 30. Le funzioni di colore azzurro supportano gli slot di distribuzione?
nuovo problema correlato: Fornire redirect vincolante per CSX caricamento multiplo dll # 1239 https://github.com/Azure/azure-webjobs-sdk-script/issues/1239 –