我在Windows 64bit上使用Visual Studio 2015.我有这个带有C ++后端的WPF项目,它使用了几个额外的软件包,如OpenCV,EmguCV和DevExpress。
现在,如果我以Release
运行,它编译得很好。此外,如果我通过资源管理器转到当前目录并导航到bin -> Release
然后执行.exe
文件,它也运行正常。
问题:该项目无法在任何其他计算机上运行:如果我复制整个 Release 文件夹并将其粘贴到另一台计算机上并尝试执行,则会弹出a" 无法加载文件或程序集"错误。请参阅Error Here以及下面的完整错误。
洞察力:那些目标机器曾经能够以相同的方式执行发布(复制/粘贴或安装程序)。该项目的目标是.Net framework 4.5
,需要2013 + 2015年可再发行文件。一切都安装在目标机器上。错误令人讨厌的Dll也存在于Release文件夹中。当我构建一个安装程序(使用Inno Setup
)时,我会看到所有必需的和现有的Dll被包含在内(OpenCv stuff和DevExpress)。
在" 解决方案资源管理器 - >中有10个未显示的OpenCv Dll。参考"但实际上存在于发布文件夹中(我们将它们粘贴在一起)。现在,如果我从MY Release Folder中删除这些文件,我会得到完全相同的错误。另一方面,如果我将它们粘贴到他们的释放文件夹中,则错误仍然存在。
" 解决方案资源管理器 - >参考文献 - >属性 - >本地副本"所有文件都设置为true。我目前构建为x86,因为如果我构建为x64,我会收到此错误:
错误NuGet错误:无法找到版本' 2.4.8'包' OpenCV.overlay-x64_v120_Release'。 C:\ Users \用户BLA \桌面\ BLA \包\ OpenCV.2.4.8 \建立\天然\ OpenCV.targets
可能是什么问题?
完成错误:
Fatal @ 9/9/2016 9:18:19 AM - CurrentDomainOnUnhandledException v2.0.1.0 - 异常信息:System.Windows.Markup.XamlParseException: 在类型' bla.MainWindow'上调用构造函数。那 匹配指定的绑定约束引发异常。 ---> System.IO.FileNotFoundException:无法加载文件或程序集 ' bla.bla.bla.dll'或其中一个依赖项。该 无法找到指定的模块。
在bla.MainWindow..ctor()
---内部异常堆栈跟踪结束---
在System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory,Boolean skipJournaledProperties,Object rootObject,XamlObjectWriterSettings 设置,Uri baseUri)
在System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader) xamlReader,Boolean skipJournaledProperties,Object rootObject, XamlAccessLevel accessLevel,Uri baseUri)
在System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext,Object parent,Boolean closeStream)
在System.Windows.Application.LoadBamlStreamWithSyncInfo(Stream stream,ParserContext pc)
在System.Windows.Application.LoadComponent(Uri resourceLocator, Boolean bSkipJournaledProperties)
在System.Windows.Application.DoStartup()
在System.Windows.Application。< .ctor> b__1_0(未使用的对象)
在 System.Windows.Threading.ExceptionWrapper.InternalRealCall(代表 callback,Object args,Int32 numArgs)
在System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source,Delegate callback,Object args,Int32 numArgs,Delegate catchHandler)
在System.Windows.Threading.DispatcherOperation.InvokeImpl()
在 System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(对象 状态)
在System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback回调,对象状态,布尔值 preserveSyncCtx)
在System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback回调,对象状态,布尔值 preserveSyncCtx)
在System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback回调,对象状态)
在 MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext,ContextCallback回调,对象状态)
在System.Windows.Threading.DispatcherOperation.Invoke()
在System.Windows.Threading.Dispatcher.ProcessQueue()
在System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd,Int32) msg,IntPtr wParam,IntPtr lParam,Boolean&处理)
在MS.Win32.HwndWrapper.WndProc(IntPtr hwnd,Int32 msg,IntPtr wParam, IntPtr lParam,Boolean&处理)
在MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)at at System.Windows.Threading.ExceptionWrapper.InternalRealCall(代表 callback,Object args,Int32 numArgs)
在System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source,Delegate callback,Object args,Int32 numArgs,Delegate catchHandler)
在 System.Windows.Threading.Dispatcher.LegacyInvokeImpl(的DispatcherPriority 优先级,TimeSpan超时,委托方法,对象args,Int32 numArgs)
在MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd,Int32 msg, IntPtr wParam,IntPtr lParam)
at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
在System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame) 框架)
在System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame 帧)
在System.Windows.Application.RunDispatcher(Object ignore)
在System.Windows.Application.RunInternal(窗口窗口)
在System.Windows.Application.Run(窗口窗口)
在bla.App.Main()
答案 0 :(得分:1)
我发现此链接可能对您有所帮助
标记答案是:
该文件是本机DLL,这意味着您无法通过添加引用将其添加到.NET项目中......您可以通过DllImport使用它(请参阅http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.aspx)
答案 1 :(得分:0)
右键单击项目中的引用,然后再次重新添加OpenCV的声明,然后刷新并重新构建解决方案。还要确保项目确实以.Net framework 4.5为目标,因为如果它以.net客户端框架为目标,有时会出现相同的错误。