Во-первых, важно отметить, что сбор имени пользователя и пароля для пользователя Azure AD как части вашего приложения (функция Azure или веб-приложение, любое другое разрабатываемое вами приложение) в значительной степени противоречит передовым методам и открывает множество атак. риски. Поэтому, даже несмотря на то, что вы можете использовать обходные пути для его достижения, пожалуйста, пересмотрите требование, которое вы предъявляете с точки зрения безопасности.
Обходной путь - ROPC - Предоставление учетных данных пароля владельца ресурса (не рекомендуется, несколько проблем)
Azure AD не предоставляет прямой API для проверки учетных данных пользователя. В качестве обходного пути (и при этом плохого) вы можете использовать поток «Учетные данные пароля владельца ресурса» (ROPC) , который работает с именем пользователя и паролем для получения токена.
Это нарушает лучшие практики безопасности, а также не работает с пользователями MFA и федеративной аутентификации . Использование этого гранта крайне нежелательно, так как это создает потенциальные риски атаки, поэтому не рекомендуется.
Если имя пользователя или пароль неверны, вы получите исключение, в противном случае вы получите верный токен, который означает, что учетные данные хороши.
Вот несколько ссылок, которые охватывают детали ROPC (и рекомендуют не использовать его одновременно ..):
Например, код будет выглядеть так для собственного приложения. [1113 ]
result = await context.AcquireTokenAsync(resource, clientId, new UserPasswordCredential("john@contoso.com", johnsPassword));
Другие ссылки
К сожалению, я не думаю, что есть простой способ сделать это. Пользовательские инструменты сборки запускаются только из VS.NET - они не запускаются, когда вы строите свой проект с помощью MSBuild из командной строки.
В общем, если у вас есть выбор написать инструмент сборки как инструмент сборки клиента или затем выберите задачу MSBuild каждый раз, поскольку эти задачи будут выполняться в VS.NET и из командной строки.
Файлы designer.cs для ресурсов предназначены для поддержки вашего кодирования. Они предоставляют строго типизированный доступ к файлу ресурсов. Итак, пока вы создаете ресурсы, инвариантные для вашей культуры в VS.NET (и позволяете ему создавать файлы .designer.cs), добавление дополнительной языковой поддержки позже (дополнительные файлы .resx) должно работать нормально.
Если, однако, ваши текстовые файлы являются вашими основными файлами ресурсов, и вы сначала добавляете новые строки ресурсов в эти текстовые файлы, затем вам нужно будет найти другой способ создания файлов .cs, который позволит вам кодировать для этих ресурсов. Если бы вам пришлось, создать файл .designer.cs самостоятельно (или что-то подобное) было бы не так сложно. Используя CodeDom или T4, вы можете создать вспомогательный класс, используя существующий файл .designer.cs в качестве шаблона.
Существует способ создать * .Designer.cs для * .resx как часть процесса сборки. Существует встроенная задача MSBuild GenerateResource , которая по сути является оберткой вокруг инструмента SDK resgen.exe. Здесь вы можете найти пример, как его использовать.
Еще одна вещь, которая может оказаться полезной, если сгенерированная версия * .Designer.cs не является правильной, в основном задача GenerateResource не вызывает нужную версию resgen.exe, установка свойства SdkToolsPath может помочь вам .
Пробовали ли вы добавить шаг Exec в шаг Before / AfterBuild в вашем csproj? Для этого вы должны вручную отредактировать файл, но это должно решить вашу проблему.
Я не совсем понимаю, хотите ли вы, чтобы это было сделано до или после сборки. Если вам нужно это сделать где-то после Pass1 / Pass2, вы можете напрямую подключиться к целям. Попробуйте заглянуть в Microsoft.Build.Common.Targets, чтобы понять, как это сделать.