首页 > 解决方案 > .Net 应用程序作为 Azure Web 作业未写入磁盘

问题描述

我有一个带有构建平台 x86 的 .net core 2.2 控制台应用程序,它只调用一个非托管 dll,它返回一个布尔结果,并且这个 dll 还在磁盘上写入一个名为“OMNISCHEDULERLIB.LOG”的 txt 文件,而在本地调试时我可以运行它和函数正确执行并在控制台上打印出 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 作为 AppService 的 WebJob 时,webjob 会在控制台上正确打印出结果,但在输出文件夹下没有创建日志文件(我已通过 ftp 和 Kudu 工具进行了检查)。我不明白的是,如果我继续使用 Kudu 工具和 webjob 目录并通过 cmd 'start myapp.exe' 运行控制台应用程序的 .exe,我会在控制台上得到结果并创建 .log 文件在我的网络作业的输出文件夹下。

我的问题是运行 azure webjob 以执行我的 .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 文件,但是如果我从 kudu 的 cmd 'start OmniManager.OmniSchedulerWebJob.exe' 手动运行命令,它将返回与上述相同的结果'True',但生成了 .log 文件。我尝试添加 run.cmd 来运行我的 dotnet 控制台应用程序 dll 但没有成功,但似乎我收到了一个错误,因为我无法从 x86 平台运行它,而且我还没有找到运行“dotnet”的方法选择 .net 的 x86 sdk 时执行命令,但我的 exe 将以 32 位执行。

标签: c#azure.net-coreazure-webjobs

解决方案


您可以使用它dotnet consolecorewebjob.dll来运行控制台核心应用程序。有关更多详细信息,您可以参考有关如何将 .NET Core 控制台应用程序部署到 Azure、WebJob的文章。

您可以尝试查看下的日志D:\home\data\logs\OMNISCHEDULERLIB.log


推荐阅读