当前位置: 首页 > 知识库问答 >
问题:

识别有问题的CLI项目依赖项中的C/C

相诚
2023-03-14

我的应用程序可以正常编译,但出现以下运行时错误:

System.IO.FileNotFoundException was unhandled
  HResult=-2147024770
  Message=Could not load file or assembly {Wrapper} or one of its dependencies. The specified module could not be found.

调用应用程序中对包装器的引用看起来是正确的。包装器dll存在于正确的位置。

这个项目曾经在别人的系统上构建和运行,我看了几次演示。那个人/电脑不再可用。自上次成功构建并运行以来,某些依赖项的某些路径已经更改,我已经修复了与此相关的所有编译错误。

为了澄清我的项目结构:

Digraph G
{
    App [ label = "My C# Application"]
    Wrapper [ label = "C++/CLI Wrapper"]
    Lib [ label = "C++ Library"]
    Dll [ label = "My helper C# DLL"]
    CDep [ label = "Series of deep C++ dependencies managed \n by CMake for Lib, hard coded relative paths for Wrapper."]
    App->Wrapper->Lib->CDep;
    App->Dll->Wrapper->CDep;
}

包装器是围绕C库的C /CLI包装器。当我们试图在应用程序中加载一个类时,会触发该错误,该类具有包装器的使用语句。

包装器确实有很多依赖项,但是错误消息并没有指出哪个依赖项有问题。这是一个庞大而复杂的系统,其中大部分是由其他团队构建的。C组件使用Cmake来获得所有正确的依赖关系,但是Cmake并不本机支持C#。

我尝试使用fuslogvw查找绑定错误,但在我更改设置以包含所有绑定之前,它完全没有显示任何内容,然后它只显示成功的绑定。http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.100)。aspx

路径很长,但不超过256个字符。

我在Dll的编译中有一个警告(见上图):警告1正在构建的项目“MSIL”的处理器架构和参考“{cli_wrapper.dll}”、“AMD64”的处理器架构之间不匹配。这种不匹配可能导致运行时失败。请考虑通过配置管理器更改项目的目标处理器体系结构,以便在项目和引用之间对齐处理器体系结构,或者使用与项目的目标处理器体系结构相匹配的处理器体系结构来依赖引用。

在Configuration Manager中,Dll是为平台“任意CPU”构建的,包装器是为“x64”构建的。我将dll更改为x64。我仍然得到运行时错误。

无法加载文件或程序集或其某个依赖项执行了清理、删除的生成目录内容。没有变化。重新打开Visual Studio。没有变化。已尝试更改程序集名称、默认命名空间和项目名称以匹配。没有变化。

无法加载文件或程序集“xxx”或其依赖项之一。有人试图加载一个格式不正确的程序,我认为我们必须编译为64位。我们依赖于64位C库。

无法加载文件或程序集。。。参数不正确,我是本地管理员。

如何启用程序集绑定故障日志记录(融合)中。NET尝试了注册表设置,但它们似乎只是Fuslogvw设置。没有改进可用的日志数据。

许多其他类似的问题都有ASP或服务安装特定的答案。

共有3个答案

洪俊能
2023-03-14

我后来遇到的另一个根本原因是,我正在处理的应用程序使用模拟,而模拟用户没有访问GAC或某些DLL所在文件夹的权限。您需要授予该用户权限,或者更改进行模拟的方式,以便在模拟开始之前加载依赖项。

焦学海
2023-03-14

本周早些时候,我在一个类似的项目中也犯了同样的错误。首先,当使用C /CLI时,“任何CPU”不存在。我必须为x86构建两个来完成事情。

此外,虽然我的包装器的依赖关系得到了满足,但CLR捕获的是包装器的异常,因此它声明包装器缺少依赖关系。实际上,我缺少了包装器包装的C DLL的一个依赖项(在我的例子中,只是忘记了将SDL2.DLL和OpenAL32.DLL放在我新的“Release”配置输出文件夹中……我以前只使用调试配置,在那里我已经删除了那些DLL。

如果您确信已经解决了包装器的依赖项,我建议使用依赖项Walker检查本机DLL的依赖项。你可以使用汇编。GetReferencedAssembly与外部脚本/程序一起双重检查包装器(或ILSpy:http://ilspy.net/).

最后但同样重要的是,看看这个:http://www.codeproject.com/Articles/442784/Best-gotchas-of-Cplusplus-CLI.他详细介绍了我提出的前两个建议以及其他一些建议。

祝你好运

凌鹏程
2023-03-14

我发现了问题。我可以使用不止一个版本的库,我使用的是一个版本的include文件和另一个版本的编译库。依赖性沃克是找到哪个图书馆有问题的关键,如果阿斯克拉特把它作为一个答案而不是评论发表,我会接受他的答案。

 类似资料:
  • 我试图通过从eclipse workspace项目导入现有maven项目来创建maven项目,但eclipse无法解决任何依赖项。每次创建项目、更新maven依赖项或清理项目时,依赖项会被下载,但它们不会从本地maven存储库中被引用。当我从命令行运行时生成构建 我已经筋疲力尽地尝试解决这个问题的所有修补程序了,比如启用索引、清理项目、Maven->update project 我的eclipse

  • 我在eclipse中有一个JavaNLP项目(比如X),它在maven中有依赖项 现在,我已经使用JavaSwing为这个项目(x)构建了UI,JavaSwing是eclipse中的另一个项目(比如Y)。 当我运行项目Y(点击按钮时调用项目X)时,会给我带来错误,比如 java.lang.NoClassDefFoundError: edu/stanford/nlp/ie/NER分类文件 我认为这是

  • 问题内容: 实际上,我的项目有单元测试。所有这些都在最近配置中。我需要在中添加检测测试。为此,我在中添加了espresso依赖项。 之后,我选择了Build Variants-> Test Artifact-> Android Instrumentation Tests。 但是,当我开始编码时,没有一个依赖项被识别: “无法解析符号onView”,“无法解析符号ViewInteraction”等…

  • 我是maven的新手。(我已经搜索了几个小时的答案,但没有运气。mvn依赖:复制依赖不能解决我的问题)我需要复制项目的所有依赖项(以jar的形式),如果我的一个jar依赖于另一个工件,也复制该工件。 示例project1 pom。xml: “project1”依赖于project2。人工制品罐子当我使用“mvn依赖项:复制依赖项”时,我得到了project2。人工制品但我没有得到project3。

  • 我正在处理另一个关于我的构建的问题。gradle需要理解我的Android项目中的工作区项目依赖关系。我已经使用Java和Android有一段时间了,但我仍然很容易对添加依赖项的所有不同方法感到困惑。一种方法是放一个标签。libs/文件夹中的jar文件。另一种方法是具有工作区项目依赖关系。另一种方法(如果使用Android)是在Android选项菜单中添加项目依赖项?我觉得如果我真的理解了为什么会

  • 我有一个使用Gradle作为构建工具的项目和第二个使用Maven的POM的子项目。我没有在子项目上更改构建工具的自由。 我想要实现的是将我的项目添加到Maven POM中,作为我的Gradle项目的依赖项。 其中root(当前目录)是我的Gradle项目,并包含,Maven项目位于下,POM文件就在该目录下。 我在我的< code>build.gradle文件中尝试了这些变化: 第一次尝试: 第二