我有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();
}
};
首先,您需要确保TestManagedLibrary.dll
文件位于Fusion可以找到它的位置。您的第一个尝试应该是您正在运行的可执行文件的位置。
处理此问题的一种方法是通过引用属性。如果使用标记TestManagedLibrary.dll
设置了对您的引用,而copy local
不是在构建过程中将引用的库从引用的位置复制到输出目录。
您可以启用内部融合日志记录以查找详细信息:
Developer Command Prompt
以管理特权运行。fuslogvw
Assembly Binding Log Viewer
命中设置中,设置Log bind failures to disk
或Log all binds to disk
。Refresh
的Assembly Binding Log Viewer
,挑选你的可执行文件和命中View Log
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句