C#指定的可执行文件不是此操作系统平台的有效应用程序

C#指定的可执行文件不是此操作系统平台的有效应用程序,c#,asp.net,multithreading,video,ffmpeg,C#,Asp.net,Multithreading,Video,Ffmpeg,我正在为我的学士学位制作一个视频共享应用程序(如youtube)(该项目以asp.net web表单完成) 我想将用户上传的任何视频转换为mp4。为此,我使用了用于asp的Nreco ffmpeg包装 我在本地做这些,但这个项目不会上线 视频转换在单独的线程中完成 protected void Upload_Click(object sender, EventArgs e) { //File Uploads to Server Thread t1 = new Thread( unused =&g

我正在为我的学士学位制作一个视频共享应用程序(如youtube)(该项目以asp.net web表单完成) 我想将用户上传的任何视频转换为mp4。为此,我使用了用于asp的Nreco ffmpeg包装

我在本地做这些,但这个项目不会上线

视频转换在单独的线程中完成

protected void Upload_Click(object sender, EventArgs e)
{
//File Uploads to Server
Thread t1 = new Thread(
unused => compressVideo(Video_Path, Final_Path,User_id)
);
t1.Start();
}

public static void compressVideo(string Video_Path, string Final_Path,string UID)
{
    var ffMpeg = new NReco.VideoConverter.FFMpegConverter();
    ffMpeg2.ConvertProgress += (o, args) =>
        {
            //SignalR calls.Doing this to update the ui
        };

    ffMpeg.ConvertMedia(Video_Path, Final_Path, NReco.VideoConverter.Format.mp4);
}
我第一次这么做时,一切都很好,没有一个问题。 两周后,在未修改此页面后,我再次尝试,应用程序引发此异常:

“System.ComponentModel.Win32Exception”类型的未处理异常 在NReco.VideoConverter.dll中发生

其他信息:指定的可执行文件无效 此操作系统平台的应用程序

在线:

ffMpeg.ConvertMedia(Video_Path, Final_Path, NReco.VideoConverter.Format.mp4);
如果我调用
ffMpeg.ConvertMedia()
,则不会引发异常,代码也会按预期工作。因此我猜这与线程有关。但这还不是全部。 在尝试解决此问题而未成功地处理代码后,我返回到原始代码。在最后一次尝试中,我再次尝试(使用原始代码),应用程序给出了生成错误

试图访问卸载的appdomain

我对代码所做的任何修改都被忽略了,在编译时我总是会遇到这个错误。 在休息五分钟冷静下来后,我再次尝试。它神奇地修复了自己。构建错误消失了,甚至转换也在工作

但是这个梦想并没有持续多久。几分钟后,转换线程开始再次抛出相同的异常。 我无法复制相同的结果


我在asp.net web表单和web设计方面的经验和知识一般都比较低,因此请尽量简单回答。

您是否尝试卸载NReco.VideoConverter NuGet软件包并重新安装?您拥有的代码正常工作-这似乎是程序包库的一个问题,可以通过重新安装来解决。

由于视频转换在同步调用中工作良好且稳定(仅从Upload\u Click handler转换媒体),我可能会建议以下原因:您已使用
t1.Start()在新线程中开始转换
但我没有看到任何等待线程结束的代码。结果,当前请求处理已完成,但转换线程仍可能运行并引发ConvertProgress事件(该事件可能访问已完成的请求对象)。根据具体情况(例如,asp.net应用程序重新启动/回收),转换可能会因“试图访问卸载的appdomain”或其他错误而崩溃


如果要从asp.net应用程序在后台执行转换过程,可以使用(仅适用于.net framework 4.5.2或更高版本)或组织自己的后台队列(例如创建新的“转换任务”)在DB表中,由作为Windows服务或控制台应用程序实现的特殊工作程序执行转换,该应用程序通过Windows Scheduler定期启动)。

您当前是否收到卸载的appdomain生成错误,或Win32Exception?如果是Win32异常,您是否以任何方式更改了您的工作环境?(例如,您使用的是不同的计算机、不同的操作系统等吗?)目前我遇到了Win32Exception。我没有更改操作系统或计算机,项目从一开始就处于完全相同的位置(如果这很重要)。我向项目中添加了一些引用和nuget包,但我认为这不会影响它。我正在尝试此操作,但QueueBackgroundWorkItem不起作用…相同错误:(