【发布时间】:2017-05-24 02:31:34
【问题描述】:
所以我有一个处理视频文件上传的 ASP.NET MVC 项目,我使用 MediaInfo 库 (C++) 以及包含的 C# 包装器(使用 DllImport 函数)来确定视频持续时间。我将 MediaInfo.dll 文件添加到我的项目中,并将“复制到输出目录”设置为始终。一切正常。
我的问题是,当我重建(从 Visual Studio)或将项目重新部署到我的生产环境时,由于文件被锁定而失败。
Unable to copy file "Sources\MediaInfo\MediaInfo.dll" to "bin\MediaInfo.dll". The process cannot access the file "bin\MediaInfo.dll" because it is being used by another process.
当然,那是因为 IIS 仍在运行。我知道我可以停止 AppPool,重建并重新启动它,但是每次在开发中构建时都这样做很麻烦,并且使生产中的更新复杂化。尤其是当所有其他 DLL (.NET) 和项目的其余部分都可以更新而无需这样做时。
所以我尝试了建议的方法 here 和 here 。每次我想扫描视频时,我都会使用 LoadLibrary() 并在调用 FreeLibrary() 之后,直到它返回 false。 FreeLibrary 部分工作,它解锁文件。但是第二次调用该方法,它调用 LoadLibrary,然后在第一次 DllImport 函数调用时,我得到一个 InvalidOperationException 并且进程崩溃。
我觉得我做的太过分了,感觉不正常,我想知道我是不是完全走错了方向。
在普通的 Visual Studio / MVC 环境中使用非托管 dll 调用进行开发的常用方法是什么?
【问题讨论】:
标签: c# asp.net asp.net-mvc dllimport