Czy jest możliwe dołączenie pliku web.config lub app.config do struktury folderów z funkcjami azure, aby umożliwić przekierowanie powiązania zespołu?Redirect binding of Asure funkcji
Odpowiedz
Dziś nie jest to bezpośrednio możliwe, ale zastanawiamy się, jak to osiągnąć. Czy możesz otworzyć numer na https://github.com/Azure/azure-webjobs-sdk-script/issues, aby upewnić się, że Twój konkretny scenariusz jest rozpatrywany? Dzięki!
Zakładając, że używasz najnowszej (June'17) Visual Studio 2017 Function Tooling, że pochodzi nieco config-rozsądne rozwiązanie oparte na to następujący fragment kodu wysłana przez npiasecki
nad na Issue #992.
Byłoby idealnie, gdyby to było zarządzane przez framework, ale przynajmniej będąc sterowanym konfiguracją, masz nieco więcej izolacji zmiany. Przypuszczam, że można również użyć kroków wstępnego budowania lub szablonowania T4, które uzgadnia wersje nugetów w projekcie (i ich zależności) przed wypisaniem tego kodu konfiguracyjnego lub generującego.
Więc minusem .... staje konieczności pamiętania zaktualizować BindingRedirects
config podczas aktualizacji pakietu Nuget (to często problem w app.configs zresztą). Możesz również mieć problem z rozwiązaniem opartym na konfiguracji, jeśli musisz przekierować Newtonsoft
.
W naszym przypadku używaliśmy nowego Azure Fluent NuGet, który był zależny od starszej wersji Microsoft.IdentityModel.Clients.ActiveDirectory
niż wersja normalnych bibliotek zarządzania ARM, które są używane obok siebie w konkretnej funkcji.
{
"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;
}
}
}
Dzięki za to. Jest to prawie niezbędne w przypadku większości projektów nuget. Mając nadzieję, że wkrótce to rozwiążą. – Grapes
Dla każdego, kto boryka się z tym problemem: jeśli masz więcej niż jedną wersję, która wymaga odbicia, musisz usunąć linię AppDomain.CurrentDomain.AssemblyResolve - = handler; Ponieważ oznaczało to tylko pierwszą wersję, którą odnaleziono, została przekierowana. – bech
Właśnie opublikował nowy wpis na blogu wyjaśniając, jak rozwiązać ten problem, spojrzeć:
To rzeczywiście Tweaked wersja Kodeksu JoeBrockhaus jest, że działa dobrze nawet na Newtonsoft.Json.dll
Zainspirowany zaakceptowanej odpowiedzi Pomyślałem, że zrobię bardziej ogólny jeden, który bierze pod uwagę także rozbudowę.
Pobiera wszystkie złożenia, zleca ich zstępowanie, aby uzyskać najnowszą wersję na wierzchu, a następnie zwraca najnowszą wersję po rozwiązaniu. Sam to nazywam statycznym konstruktorem.
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. 301 Redirect vs Rewrite
- 2. Powershell config config redirect
- 3. Knockoutjs click binding in foreach binding
- 4. Binding StringFormat
- 5. Spring Ouath2 Registered Redirect Uri
- 6. JavaFX force recompute binding
- 7. JGoodies Binding vs. JSR 295
- 8. Data Binding with srcCompat
- 9. ListBox SelectedItems Binding
- 10. Wpf combobox binding
- 11. Expander WPF IsExpanded binding
- 12. Binding Setter.Value z kodu
- 13. jQuery TwoWay Data Binding
- 14. WPF Binding: wartość
- 15. MVC3 Complex JSON List Binding
- 16. Laravel - Dodaj końcowy ukośnik z Redirect :: route()
- 17. Redirect Perl print statement do rejestru Apache
- 18. powrócić nową RedirectResult() vs powrotnej Redirect()
- 19. Redirect/Pipe wget pobierz bezpośrednio do gunzip
- 20. ObservableCollection (Of T) vs BindingList (Of T)?
- 21. Usuwanie przeciążonej funkcji. C++ 11. Call of przeciążony ... jest niejednoznaczny
- 22. Haskell LLVM binding Niejednoznaczny Typ
- 23. Knockout Twitter Bootstrap Popover Binding
- 24. AngularJS Array of Promises
- 25. Binding przekierowanie nie powiedzie - inny TokenKluczaPublicznego
- 26. Binding Lista obiektów MVC obiektów
- 27. Asp.Net MVC DropDownList Data Binding
- 28. Html.HiddenFor binding do niewłaściwego elementu
- 29. MVC4 RC Parametr WebApi binding
- 30. WPF Casting in Binding Path
nowy problem związany: wiążące przekierowań dla CSX ładowanie wielu DLL # 1239 https://github.com/Azure/azure-webjobs-sdk-script/issues/1239 –