从C ++ / CLI调用C#dll时出现FileNotFoundException

用户名

我有C# dll一些方法,正在尝试在/CLR支持下的本机项目中访问

DLL使用#using指令引用了它,然后DLL识别了并编译了项目。

但是,在运行时,我得到一个FileNotFoundException,这很奇怪,因为DLL位于项目的源目录中。

DLL编译在VS 2015使用.NET版本4.5.2由于我CLR对C ++的混合支持,因此我已将项目文件编辑TargetFrameworkVersion为4.5.2,但仍然runtime无法正常工作。

请就可能是什么问题提供建议?

EIDT-附加的一些代码

C#

namespace TestManagedLibrary
{
    public class Class1
    {
        public int i;
        public Class1()
        {
            i = 5;
        }

        public int returnValue()
        {
            return i;
        }
    }
}

C ++ / CLI

#using <TestManagedLibrary.dll>


using namespace System;
using namespace System::Runtime::InteropServices; // Marshal
using namespace TestManagedLibrary;


ref class ManagedFoo
{
public:
    ManagedFoo()
    {
        Console::WriteLine(_T("Constructing ManagedFoo"));
        Class1 ^testObject = gcnew Class1();
        int a = testObject->returnValue();
    }
};
兹韦列夫·叶夫根尼(Zverev Evgeniy)

首先,您需要确保TestManagedLibrary.dll文件位于Fusion可以找到它的位置。您的第一个尝试应该是您正在运行的可执行文件的位置。

处理此问题的一种方法是通过引用属性。如果使用标记TestManagedLibrary.dll设置了对您的引用,而copy local不是在构建过程中将引用的库从引用的位置复制到输出目录。

您可以启用内部融合日志记录以查找详细信息:

  1. Developer Command Prompt以管理特权运行
  2. 跑步 fuslogvw
  3. Assembly Binding Log Viewer命中设置中,设置Log bind failures to diskLog all binds to disk
  4. 开始服务
  5. RefreshAssembly Binding Log Viewer,挑选你的可执行文件和命中View Log

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章