我有一个C# dll
,有一些方法,我试图在我的原生项目中访问/CLR
支持。
我使用DLL
指令引用此#using
,并识别DLL
并编译项目。
但是,在运行时,我得到一个FileNotFoundException
,这很奇怪,因为DLL存在于项目的源目录中。
DLL
使用.NET版本VS 2015
在4.5.2
中编译。由于我对C ++混合使用CLR
支持,因此我编辑了项目文件以使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();
}
};
答案 0 :(得分:3)
首先,您需要确保TestManagedLibrary.dll
文件位于Fusion可以找到它的位置。您的第一次尝试应该是您正在运行的可执行文件的位置。
处理此问题的一种方法是通过引用属性。如果使用TestManagedLibrary.dll
标志设置copy local
的引用而不是构建期间,则引用的库将从引用的位置复制到输出目录。
您可以启用内部fusion logging以查找详细信息:
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
答案 1 :(得分:0)
已编译的DLL
应与CLR
的可执行文件位于同一位置以进行搜索。就我而言,.NET
已编译的DLL
位于解决方案文件夹中,无法搜索。