Я сам исследовал это время от времени в течение несколько лет и наконец-то наткнулся на деньги...
// "zcztcwvu6iyg6"
var unique = ArmUniqueString("tyeth");
Моя функция ArmUniqueString
представляет собой оболочку для некоторых библиотек DLL, которые распространяются с Комплект разработки Azure Stack Hub, который представляет собой образ виртуальной машины, содержащий серверную платформу Azure, которую можно запускать локально...
private static string ArmUniqueString(string originalString)
{
var assembly = Assembly.GetAssembly(
typeof(Microsoft.WindowsAzure.ResourceStack.Frontdoor.Templates.Engines.TemplateEngine)
);
var functions = assembly.GetType(
"Microsoft.WindowsAzure.ResourceStack.Frontdoor.Templates.Expressions.TemplateExpressionBuiltInFunctions"
);
var uniqueString = functions.GetMethod(
"UniqueString",
BindingFlags.Static | BindingFlags.NonPublic
);
var parameters = new object[] {
"uniqueString",
new JToken[] {
(JToken)originalString
}
};
var result = uniqueString.Invoke(null, parameters).ToString();
return result;
}
Вам потребуется загрузить пакет разработки Azure Stack Hub и распаковать его, чтобы получить библиотеки DLL:
- Скачайте комплект средств разработки Azure Stack Hub – предупреждение : это около 22Gb!
- Запустите установщик, чтобы распаковать 55Gb *.vhdx
- Смонтируйте *.vhdx или разверните/распакуйте его локально
- Inside the *.vhdx, find this file and unzip it somewhere:
CloudBuilder\CloudDeployment\NuGetStore\Microsoft.AzureStack.Setup.Services.ResourceManager.5.20.1335.300.nupkg
- Папка
content\Website\bin
внутри *.nupkg
содержит необходимые dll
Чтобы использовать их, добавьте ссылку на сборку в Microsoft.WindowsAzure.ResourceStack.Frontdoor.Templates.dll
(у нее есть некоторые зависимости от других файлов в папке bin), которая содержит класс TemplateExpressionBuiltInFunctions
. Приведенный выше код просто использует отражение для вызова закрытой функции UniqueString
из этой сборки с небольшой работой по маршалированию параметров в соответствующие типы JToken
.
Если вы хотите покопаться в деталях реализации, вы, вероятно, могли бы запустить декомпилятор для сборки, чтобы узнать, что она делает под обложками...
Примечание. Кредиты идут в эту статью в блоге за указание меня в правильном направлении:
https://the.agilesql.club/2017/12/azure-arm-template-function-internals/
person
mclayton
schedule
05.05.2021