Возможно ли включить файл web.config или app.config в структуру папок с функциями лазурного листа, чтобы разрешить переадресацию связывания сборки?Azure Функции, связывающие переадресацию
ответ
Сегодня это невозможно, но мы думаем о путях достижения этого. Не могли бы вы открыть вопрос по адресу https://github.com/Azure/azure-webjobs-sdk-script/issues, чтобы убедиться, что ваш конкретный сценарий рассмотрен? Благодаря!
Предполагая, что вы используете новейший (June'17) Visual Studio 2017 Function Tooling, я получил несколько разумное решение на основе конфигурации для этого, следуя фрагменту кода, отправленному npiasecki
по адресу Issue #992.
Было бы идеально, если бы это было реализовано через фреймворк, но, по крайней мере, с помощью конфигурации, у вас есть немного более изоляция изменений. Я полагаю, вы могли бы также использовать некоторые шаги предварительной сборки или шаблоны T4, которые сверяли версии nugets в проекте (и их зависимости), прежде чем записывать эту конфигурацию или генерировать код.
Так оборотная .... становится, чтобы помнить, чтобы обновить BindingRedirects
конфигурации при обновлении пакета NuGet (это часто проблема в app.configs все равно). У вас также может быть проблема с конфигурационным решением, если вам нужно перенаправить Newtonsoft
.
В нашем случае мы использовали новый Azure Fluent NuGet, который имел зависимость от более старой версии Microsoft.IdentityModel.Clients.ActiveDirectory
, чем версия обычных библиотек управления ARM, которые используются бок о бок в конкретной функции.
{
"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;
}
}
}
Спасибо за это. Это в значительной степени необходимо для большинства проектов nuget. Надеясь, что они обратятся к этому в ближайшее время. – Grapes
Для тех, кто борется за выполнение этой работы: если у вас есть более одной версии, которую нужно отскочить, вам придется удалить строку AppDomain.CurrentDomain.AssemblyResolve - = обработчик; Поскольку это означало, что только первая найденная версия была перенаправлена. – bech
Просто отправил новое сообщение в блоге, объясняя, как решить эту проблему, имеют вид:
Это фактически приспособленная версия кода JoeBrockhaus в, который хорошо работает даже для Newtonsoft.Json.dll
Вдохновленных принятого ответом я решил сделать более общие один, который принимает в модернизацию счета, а также.
Он извлекает все сборки, заказывает их по убыванию, чтобы получить самую новую версию сверху, а затем возвращает самую новую версию при разрешении. Я называю это в статическом конструкторе.
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. связывающие функции и определяющие аргументы для его
- 2. связывающие функции, которые содержат «это» (JQuery)
- 3. MinGW и @N функции DLL, связывающие
- 4. связывающие свойства
- 5. Динамически связывающие нумерованные объекты?
- 6. связывающие события с WxPython
- 7. Qt, связывающие проблемы
- 8. Gallery.php связывающие изображения
- 9. Как выполнить балансировку нагрузки/переадресацию портов на Azure?
- 10. Linux связывающие папки
- 11. Данные, связывающие динамические данные
- 12. Qt: ошибки, связывающие
- 13. Неопределенных ссылок (связывающие erros)
- 14. Угловые связывающие вложенные данные
- 15. CocoaPods, не связывающие библиотеки
- 16. ViewModel не связывающие
- 17. связывающие гипер кнопки ссылка
- 18. Докерные контейнеры, связывающие
- 19. WxWidgets связывающие проблемы
- 20. NativeScript связывающие разрывы UI
- 21. угловые данные не связывающие
- 22. WPF-связывающие точки полилинии
- 23. Связывающие динамически сгенерированные компоненты
- 24. Prolog связывающие аргументы
- 25. Сигналы и связывающие аргументы
- 26. CMake: связывающие библиотеки, которые содержат глобальные функции, определенные вне класса
- 27. Функции Azure для чтения Azure Mobile App Легкие данные таблицы
- 28. Как я могу использовать порт-переадресацию на сервере azure microsoft 2012 [azure]
- 29. jQuery Автокомпоненты, связывающие динамические элементы
- 30. Тетради Конструкторы и связывающие ошибки
новый связанный с этим вопрос: Предоставление Binding переадресовывает для CSX загрузки нескольких DLL # 1239 https://github.com/Azure/azure-webjobs-sdk-script/issues/1239 –