Приложение .Net как веб-задание Azure не пишет на диск - PullRequest
0 голосов
/ 12 марта 2019

У меня есть консольное приложение .net core 2.2 с платформой сборки x86, которое просто вызывает неуправляемую dll, которая возвращает bool результата, и эта dll также записывает на диск txt-файл с именем «OMNISCHEDULERLIB.LOG», находясь в режиме локальной отладки.Я могу запустить его, и функция выполняется правильно, и выводит на консоль логический результат от dll.

class Program
{
    static void Main(string[] args)
    {
        try
        {
            var result = ProcessJobs();
            Console.WriteLine(result);
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message + e.StackTrace);
        }
    }

    [DllImport("Output/OmniSchedulerLIB.dll", CallingConvention = CallingConvention.StdCall, EntryPoint = "ProcessJobs")]
    private static extern bool ProcessJobs();
}

Это код моего файла Program.cs, который локально вызывает dll и генерирует напапка Выведите «OMNISCHEDULERLIB.LOG».Когда я развернул его в Azure в качестве WebJob-приложения AppService, веб-работа правильно выводит на консоль результаты, но в выходной папке не создается файл журнала (я проверил через ftp и инструмент Kudu).Чего я не понимаю, так это того, что если я захожу на инструмент Kudu и в каталог webjob и запускаю мой .exe консольного приложения с помощью cmd 'start myapp.exe', я получаю результат на консоли и создаю файл .logв папке «Вывод» на моем веб-задании.

Мой вопрос заключается в том, какая команда выполняет веб-задание Azure для выполнения моей основной консоли .net и как она предотвращает запись на диск или любое другое объяснение этой ситуации.?

Редактировать: после перехода в D: \ home \ data \ logs \ я смог найти, какой скрипт выполняется

[03/13/2019 10:05:00 > a87042: SYS INFO] Status changed to Initializing
[03/13/2019 10:05:05 > a87042: SYS INFO] Run script 'OmniManager.OmniSchedulerWebJob.exe' with script host - 'WindowsScriptHost'
[03/13/2019 10:05:05 > a87042: SYS INFO] Status changed to Running
[03/13/2019 10:05:10 > a87042: INFO] True
[03/13/2019 10:05:10 > a87042: SYS INFO] Status changed to Success

Но файл .log там не создается,но если я запускаю вручную команду из cmd 'start OmniManager.OmniSchedulerWebJob.exe из команды kudu, она выдаст тот же результат выше' True ', но с созданным файлом .log.Я безуспешно пытался добавить run.cmd для запуска моего dll консольного приложения dotnet, но, похоже, я получаю сообщение об ошибке, так как не могу запустить его с платформы x86 и не нашел способа запустить 'dotnet'Команда при выборе x86 SDK .NET, но мой исполняемый файл будет выполняться в 32-разрядной.

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Вы можете использовать dotnet consolecorewebjob.dll для запуска основного приложения консоли.Для получения дополнительной информации вы можете обратиться к статье о Как развернуть консольное приложение .NET Core в Azure, WebJob .

. Вы можете попробовать просмотреть журнал в разделе D:\home\data\logs\OMNISCHEDULERLIB.log.

0 голосов
/ 14 марта 2019

Очевидно, так как я смог получить ожидаемый выходной файл .log, запустив .exe основного приложения .net (я опубликовал как самодостаточный для работы в качестве x86) с помощью инструмента kudu powershell, обходным решением было добавить прогон. cmd подает файл в webjob с помощью команды 'cmd /c myapplication.exe', чтобы получить результат логического значения, возвращенного операцией dll, а также разрешить dll писать в каталоге webjob. Все ответы не были достаточными для достижения моего решения, так как они содержали полезные ссылки, которые я уже пересек, прежде чем задавать этот вопрос, но я ценю все комментарии.

...