アセンブリバインディングのリダイレクトを許可するために、azure関数フォルダ構造にweb.configまたはapp.configファイルを含めることはできますか?Azure関数バインディングリダイレクト
答えて
今日は直接可能ではありませんが、これを達成する方法について考えています。特定のシナリオを確認するために、https://github.com/Azure/azure-webjobs-sdk-script/issuesの問題を開いてください。ありがとう!
最新(June'17)のVisual Studio 2017関数ツールを使用していると仮定して、npiasecki
に投稿されたコードスニペットに続いてIssue #992にいくぶん合理的な設定ベースのソリューションを導き出しました。
これはフレームワークによって管理されていても、少なくともコンフィギュレーションドリブンであれば、より多くの変更を分離することができれば理想的です。私はあなたがまた、この設定を書くか、コードを生成する前に、プロジェクト内のナゲットのバージョン(とその依存関係)を調整するいくつかのビルド前のステップやT4のテンプレートを使うこともできると思います。
だから、マイナス面.....は(これはとにかく頻繁に app.configsで問題となっている)あなたはNuGetパッケージを更新するときBindingRedirects
設定を更新することを忘れないように持ってしまいます。 Newtonsoft
をリダイレクトする必要がある場合は、設定ドリブンソリューションに関する問題が発生することもあります。
私たちのケースでは、新しいバージョンのAzure Fluent NuGetを使っていましたが、これは特定の機能で並んで使用される通常のARM管理ライブラリのバージョンよりも古いバージョンのMicrosoft.IdentityModel.Clients.ActiveDirectory
に依存していました。
{
"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;
}
}
}
ちょうど見て、問題を解決する方法を説明する新しいブログ記事を投稿:
それは実際にも、私は、同様のアカウントのアップグレードにかかるより一般的ないずれかの操作を実行したい考え出し受け入れ答えに触発さNewtonsoft.Json.dll
に適していますJoeBrockhausのコードの微調整バージョンです。
すべてのアセンブリをフェッチし、降順に並べ替えて最新のバージョンを取得し、解決の際に最新のバージョンを返します。私は静的なコンストラクタでこれを自分で呼びます。
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. Azure関数SendGrid
- 2. Azure関数イベントハブトリガー
- 3. コンポーネントテストAzure関数
- 4. Azure関数 - サービスバススケーリング
- 5. Azure関数 - ファンクションキー
- 6. Azure関数イベントハブバインドリトライ
- 7. Azure関数アプリケーションフルログ
- 8. Azure関数タイマトリガスケールアウト
- 9. Azure関数リクエストトレース
- 10. Azure関数とNode.js
- 11. azure関数webhookキー
- 12. azure関数のスケールアウト
- 13. Azure関数Traffic Manager
- 14. Azure関数のNewtonsoft.Json
- 15. Azure関数のコンテキスト
- 16. Azure関数とロジックアプリケーション
- 17. Azure関数のスケジューラ
- 18. Azure関数のサポートオフライン
- 19. Azure関数でシリアライズ
- 20. Azure関数Webソケットクライアント
- 21. Azure App関数ファイルシステム
- 22. 他のAzure関数からAzure関数をトリガーする方法
- 23. Azure WebDriver.dllを使用したAzure関数
- 24. Azure関数Azure Data Lake用カスタムDLL
- 25. Azure関数Func.exe再ロード
- 26. Azure関数とドキュメントDB
- 27. Azure関数Image resizeコンテンツタイプ
- 28. Azure関数のアプリケーションのリスト
- 29. クラスライブラリのAzure関数リファレンス
- 30. C# - Azure関数の問題
新たな関連問題:https://github.com/Azure/azure-webjobs-sdk-script/issues/1239複数のdll#1239をロードこのため –