.Net 应用程序作为 Azure Web 作业不写入磁盘
.Net Application as Azure Web Job not writing on disk
我有一个带有构建平台 x86 的 .net core 2.2 控制台应用程序,它只调用一个非托管 dll,return 是结果的布尔值,这个 dll 还在磁盘上写入一个名为 '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'。
当我将它作为 AppService 的 WebJob 部署到 azure 时,webjob 在控制台上正确打印出结果,但在输出文件夹下没有创建日志文件(我已经通过 ftp 和 Kudu 工具进行了检查)。
我不明白的是,如果我继续 Kudu 工具和 webjob 目录和 运行 我的控制台应用程序的 .exe 通过 cmd 'start myapp.exe' 我在控制台和 .log 上得到结果文件是在我的网络作业的输出文件夹下创建的。
我的问题是 azure webjob 运行 执行我的 .net 核心控制台的命令是什么,它是如何阻止写入磁盘的,或者对这种情况的任何其他解释?
编辑:进入 D:\home\data\logs\ 后,我能够找到哪个脚本是 运行ning
[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' 它会 return 与上面相同的结果 'True' 但生成了 .log 文件。我尝试将 run.cmd 添加到 运行 我的 dotnet 控制台应用程序 dll 但没有成功,但似乎我收到了一个错误,因为我无法从 x86 平台 运行 它而且我还没有'在选择 .net 的 x86 sdk 时,我找到了 运行 'dotnet' 命令的方法,但我的 exe 将以 32 位执行。
您可以使用 dotnet consolecorewebjob.dll
到 运行 控制台核心应用程序。详情请参考How to deploy a .NET Core console application to Azure, WebJob.
一文
您可以尝试查看 D:\home\data\logs\OMNISCHEDULERLIB.log
下的日志。
显然,因为我能够通过 kudu powershell 工具通过 .net 核心应用程序的 运行.exe 获得预期的输出 .log 文件(我作为 x86 独立发布)是使用命令 'cmd /c myapplication.exe'
将 run.cmd 文件添加到 webjob,这样它就是 dll 操作返回的布尔值的结果,并允许 dll 写入 webjob 目录。
所有的答案都不足以找到我的解决方案,因为它们提供了有用的链接,我在提出这个问题之前已经通过了这些链接,但我感谢所有的输入。
我有一个带有构建平台 x86 的 .net core 2.2 控制台应用程序,它只调用一个非托管 dll,return 是结果的布尔值,这个 dll 还在磁盘上写入一个名为 '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'。 当我将它作为 AppService 的 WebJob 部署到 azure 时,webjob 在控制台上正确打印出结果,但在输出文件夹下没有创建日志文件(我已经通过 ftp 和 Kudu 工具进行了检查)。 我不明白的是,如果我继续 Kudu 工具和 webjob 目录和 运行 我的控制台应用程序的 .exe 通过 cmd 'start myapp.exe' 我在控制台和 .log 上得到结果文件是在我的网络作业的输出文件夹下创建的。
我的问题是 azure webjob 运行 执行我的 .net 核心控制台的命令是什么,它是如何阻止写入磁盘的,或者对这种情况的任何其他解释?
编辑:进入 D:\home\data\logs\ 后,我能够找到哪个脚本是 运行ning
[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' 它会 return 与上面相同的结果 'True' 但生成了 .log 文件。我尝试将 run.cmd 添加到 运行 我的 dotnet 控制台应用程序 dll 但没有成功,但似乎我收到了一个错误,因为我无法从 x86 平台 运行 它而且我还没有'在选择 .net 的 x86 sdk 时,我找到了 运行 'dotnet' 命令的方法,但我的 exe 将以 32 位执行。
您可以使用 dotnet consolecorewebjob.dll
到 运行 控制台核心应用程序。详情请参考How to deploy a .NET Core console application to Azure, WebJob.
您可以尝试查看 D:\home\data\logs\OMNISCHEDULERLIB.log
下的日志。
显然,因为我能够通过 kudu powershell 工具通过 .net 核心应用程序的 运行.exe 获得预期的输出 .log 文件(我作为 x86 独立发布)是使用命令 'cmd /c myapplication.exe'
将 run.cmd 文件添加到 webjob,这样它就是 dll 操作返回的布尔值的结果,并允许 dll 写入 webjob 目录。
所有的答案都不足以找到我的解决方案,因为它们提供了有用的链接,我在提出这个问题之前已经通过了这些链接,但我感谢所有的输入。