我使用Accord.Video.FFMPEG.dll和Accord.Video.FFMPEG.x64.dll进行屏幕录制。实际上我想基于我已经做过的处理器来加载dll,这样做并且工作正常。
private static Assembly CustomResolve(object sender, ResolveEventArgs args)
{
try
{
log.DebugFormat("{0}, {1}", args.Name, args.RequestingAssembly);
string InstalledLocation = Assembly.GetExecutingAssembly().Location;
InstalledLocation = InstalledLocation.Substring(0, InstalledLocation.LastIndexOf("\\"));
if (Environment.Is64BitProcess)
InstalledLocation = InstalledLocation + "\\x64\\Accord.Video.FFMPEG.x64.dll";
else
InstalledLocation = InstalledLocation + "\\x86\\Accord.Video.FFMPEG.dll";
if (log.IsInfoEnabled) log.InfoFormat("Current Process envirnoment is {0}", Environment.Is64BitProcess);
if (System.IO.File.Exists(InstalledLocation))
{
if (log.IsDebugEnabled) log.Debug("Loading " + InstalledLocation);
return System.Reflection.Assembly.LoadFile(InstalledLocation);
}
}
catch (Exception ex)
{
//EventLog.WriteEntry("IN Application Exception Create", ex.Message + "Trace" + ex.StackTrace, EventLogEntryType.Error, 121, short.MaxValue);
log.ErrorFormat("Exception occured while loading the assembiles {0}, {1}", ex.Message, ex.StackTrace);
}
return null;
}
但我的问题是我必须将我的安装程序项目中的dll捆绑在一起,该项目目前是针对x86的。当我试图在安装程序的应用程序文件夹中添加此dll然后它抛出错误
错误:文件' Accord.Video.FFMPEG.x64.dll'定位' AMD64'与项目的目标平台&x; x86'不兼容 错误:文件' Accord.Video.FFMPEG.x64.dll'定位' AMD64'与项目的目标平台&x; x86'不兼容 警告:文件' Accord.Video.FFMPEG.x64.dll'定位' x64'与项目的目标平台&x; x86'不兼容 警告:文件' Accord.Video.FFMPEG.x64.dll'定位' x64'与项目的目标平台&x; x86'不兼容 构建过程已取消
答案 0 :(得分:1)
这就是它的工作方式。不同的架构需要不同的包:
因此,对于32位系统,您需要32位设置(仅包含32位组件)和64位设置,可以包含32位和64位组件:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa367451(v=vs.85).aspx
如果您支持的硬件只支持x86 32位,那么您的帖子就不清楚了,因为大多数现代硬件都是64位支持" legacy" x86应用程序。因此在我看来,您可能只需要一个安装两个Dll的64位版本。冒着明显的风险,您可能需要在64位计算机上仅支持32位和64位客户端,而不支持旧的仅限x86的硬件。