使用 MEF 导入 C++/CLI dll
Import C++/CLI dll using MEF
我有一个 C# 接口和一个 C++\CLI 实现,我想在我的托管代码中使用它们。
C# 代码:
public interface IEngine
{
void Run();
}
C++\CLI 代码:
[Export(IEngine::typeid)]
public ref class Engine : public IEngine
{
public:
virtual void Run(){}
};
C# 加载程序:
public class Loader
{
public IEngine Load()
{
var path = @"D:\Engine\Dlls";
var catalog = new AggregateCatalog(
newAssemblyCatalog(Assembly.GetExecutingAssembly().Location),
new DirectoryCatalog(path, "*.dll"));
var m_container = new CompositionContainer(catalog);
return m_container.GetExportedValue<IEngine>();
}
}
我希望能够通过字面名称或对象名称(如上所述)加载 .dll。
当我调用 ReflectionTypeLoadException 类型的 GetExportedValue 时,上面的代码抛出错误:
InnerException = null
Message = "Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information."
Source = "mscorlib"
此外,在 LoaderExceptions
中有 12 个例外(全部相同):
[System.IO.FileNotFoundException] {System.IO.FileNotFoundException: Could not load file or assembly 'GNetTcp, Version=1.0.0.23326, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
File name: 'GNetTcp, Version=1.0.0.23326, Culture=neutral, PublicKeyToken=null'
=== Pre-bind state information ===
LOG: DisplayName = GNetTcp, Version=1.0.0.23326, Culture=neutral, PublicKeyToken=null
(Fully-specified)
LOG: Appbase = file:///D:/NovaSW/Selective_Modeling_45/Engine/Sources/Algorithms/Algs/SelectiveModeling45Tests/bin/Debug
LOG: Initial PrivatePath = NULL
Calling assembly : ComputationDataTypes, Version=7.2.0.1, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in LoadFrom load context.
WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load().
LOG: Using application configuration file: C:\Users\rotem-o\AppData\Local\Tempknkp2kk.w3r533983-b3f6-4ca4-bb72-9f8ea4a2e2a3.config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///D:/NovaSW/Selective_Modeling_45/Engine/Sources/Algorithms/Algs/SelectiveModeling45Tests/bin/Debug/GNetTcp.DLL.
LOG: Attempting download of new URL file:///D:/NovaSW/Selective_Modeling_45/Engine/Sources/Algorithms/Algs/SelectiveModeling45Tests/bin/Debug/GNetTcp/GNetTcp.DLL.
LOG: Attempting download of new URL file:///D:/NovaSW/Selective_Modeling_45/Engine/Sources/Algorithms/Algs/SelectiveModeling45Tests/bin/Debug/GNetTcp.EXE.
LOG: Attempting download of new URL file:///D:/NovaSW/Selective_Modeling_45/Engine/Sources/Algorithms/Algs/SelectiveModeling45Tests/bin/Debug/GNetTcp/GNetTcp.EXE.
LOG: Attempting download of new URL file:///D:/NOVASW/SELECTIVE_MODELING_45/OUTPUT/BINARIES/REFERENCES/DLLSENGINE/GNetTcp.DLL.
LOG: Attempting download of new URL file:///D:/NOVASW/SELECTIVE_MODELING_45/OUTPUT/BINARIES/REFERENCES/DLLSENGINE/GNetTcp/GNetTcp.DLL.
LOG: Attempting download of new URL file:///D:/NOVASW/SELECTIVE_MODELING_45/OUTPUT/BINARIES/REFERENCES/DLLSENGINE/GNetTcp.EXE.
LOG: Attempting download of new URL file:///D:/NOVASW/SELECTIVE_MODELING_45/OUTPUT/BINARIES/REFERENCES/DLLSENGINE/GNetTcp/GNetTcp.EXE.
} System.IO.FileNotFoundException
我找不到使用界面和 managed\unmanaged.dll 加载的教程。有知道的请私信我
我应该如何使用它,我做错了什么?
Fusion 日志告诉您出了什么问题。
WRN: Native image will not be probed in LoadFrom context.
C++/CLI 图像是混合模式,由于加载它可能会有副作用(DllMain
执行),MEF 不会冒险。您仍然可以显式加载程序集。
我有一个 C# 接口和一个 C++\CLI 实现,我想在我的托管代码中使用它们。
C# 代码:
public interface IEngine
{
void Run();
}
C++\CLI 代码:
[Export(IEngine::typeid)]
public ref class Engine : public IEngine
{
public:
virtual void Run(){}
};
C# 加载程序:
public class Loader
{
public IEngine Load()
{
var path = @"D:\Engine\Dlls";
var catalog = new AggregateCatalog(
newAssemblyCatalog(Assembly.GetExecutingAssembly().Location),
new DirectoryCatalog(path, "*.dll"));
var m_container = new CompositionContainer(catalog);
return m_container.GetExportedValue<IEngine>();
}
}
我希望能够通过字面名称或对象名称(如上所述)加载 .dll。
当我调用 ReflectionTypeLoadException 类型的 GetExportedValue 时,上面的代码抛出错误:
InnerException = null
Message = "Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information."
Source = "mscorlib"
此外,在 LoaderExceptions
中有 12 个例外(全部相同):
[System.IO.FileNotFoundException] {System.IO.FileNotFoundException: Could not load file or assembly 'GNetTcp, Version=1.0.0.23326, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
File name: 'GNetTcp, Version=1.0.0.23326, Culture=neutral, PublicKeyToken=null'
=== Pre-bind state information ===
LOG: DisplayName = GNetTcp, Version=1.0.0.23326, Culture=neutral, PublicKeyToken=null
(Fully-specified)
LOG: Appbase = file:///D:/NovaSW/Selective_Modeling_45/Engine/Sources/Algorithms/Algs/SelectiveModeling45Tests/bin/Debug
LOG: Initial PrivatePath = NULL
Calling assembly : ComputationDataTypes, Version=7.2.0.1, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in LoadFrom load context.
WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load().
LOG: Using application configuration file: C:\Users\rotem-o\AppData\Local\Tempknkp2kk.w3r533983-b3f6-4ca4-bb72-9f8ea4a2e2a3.config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///D:/NovaSW/Selective_Modeling_45/Engine/Sources/Algorithms/Algs/SelectiveModeling45Tests/bin/Debug/GNetTcp.DLL.
LOG: Attempting download of new URL file:///D:/NovaSW/Selective_Modeling_45/Engine/Sources/Algorithms/Algs/SelectiveModeling45Tests/bin/Debug/GNetTcp/GNetTcp.DLL.
LOG: Attempting download of new URL file:///D:/NovaSW/Selective_Modeling_45/Engine/Sources/Algorithms/Algs/SelectiveModeling45Tests/bin/Debug/GNetTcp.EXE.
LOG: Attempting download of new URL file:///D:/NovaSW/Selective_Modeling_45/Engine/Sources/Algorithms/Algs/SelectiveModeling45Tests/bin/Debug/GNetTcp/GNetTcp.EXE.
LOG: Attempting download of new URL file:///D:/NOVASW/SELECTIVE_MODELING_45/OUTPUT/BINARIES/REFERENCES/DLLSENGINE/GNetTcp.DLL.
LOG: Attempting download of new URL file:///D:/NOVASW/SELECTIVE_MODELING_45/OUTPUT/BINARIES/REFERENCES/DLLSENGINE/GNetTcp/GNetTcp.DLL.
LOG: Attempting download of new URL file:///D:/NOVASW/SELECTIVE_MODELING_45/OUTPUT/BINARIES/REFERENCES/DLLSENGINE/GNetTcp.EXE.
LOG: Attempting download of new URL file:///D:/NOVASW/SELECTIVE_MODELING_45/OUTPUT/BINARIES/REFERENCES/DLLSENGINE/GNetTcp/GNetTcp.EXE.
} System.IO.FileNotFoundException
我找不到使用界面和 managed\unmanaged.dll 加载的教程。有知道的请私信我
我应该如何使用它,我做错了什么?
Fusion 日志告诉您出了什么问题。
WRN: Native image will not be probed in LoadFrom context.
C++/CLI 图像是混合模式,由于加载它可能会有副作用(DllMain
执行),MEF 不会冒险。您仍然可以显式加载程序集。