我正在尝试将我的项目发布为单击一次应用程序,所有内容都构建并正确编译,我可以运行该程序。问题是在点击运行期间我一直得到'Emgu.CV.CvInvoke'的类型初始化程序引发异常。在调试或发布模式下从Visual Studio启动应用程序时我有没问题。我已经确定这是因为我的nuget包中的x86和x64文件夹没有被复制到应用程序文件中。
我的应用程序也没有直接引用emgucv。它的工作方式是我有 MainProject 参考库A ,它引用库B ,其中包含用于emgu CV的nuget包。
他们都定位任何CPU 并运行 .Net Framework 4.7
我还添加了以下后期构建事件来复制非托管dll:
MainProject:
复制“$(SolutionDir)LibraryA \ $(OutDir)。”“$(TargetDir)”/ d
图书馆A:
复制“$(ProjectDir)Unmanaged *。*”“$(TargetDir)”
复制“$(SolutionDir)LibraryB \ $(OutDir)。”“$(TargetDir)”/ d
当我查看发布内容的应用程序文件时,我看不到包含cvextern.dll emgu的x86或x64文件夹依赖于。
我觉得我错过了一些阻止CvExtern自动复制的重要内容。
从版本3.1更新到3.4也无济于事。
我找到了一个解决方案,将文件夹从包的文件夹复制到主项目中并将它们设置为始终复制然而这感觉更像是一个解决方案,因为我感觉好像我不应该引用多个项目中的文件。
答案 0 :(得分:0)
在Visual Studio中,在正在发布的项目中为x86和x64创建新项目文件夹。将bin文件夹中的Emgu dll复制到新的解决方案文件夹中。将项目中的文件作为内容包含在内,并设置"复制到输出目录"财产到"复制如果更新"对于每个文件。这应该导致发布者包括部署中的文件并将文件放在正确的相对路径中。