.net - NET.addAssembly 返回奇怪的可以加载程序集或其依赖项之一
问题描述
在 Matlab 中加载我的一些程序集时,我遇到了一个奇怪的问题:
function [] = foo()
%[
fold = 'c:\FolderWithAllAssembliesAndDependencies';
try
NET.addAssembly(fullfile(fold, 'MainAssembly.dll'));
catch ex
if (isa(ex, NET.NetException) && isfield(ex.ExceptionObject, 'LoaderExceptions'))
error(char(ex.ExceptionObject.LoaderExceptions.Get(0).Message));
else
rethrow ex;
end
end
%]
返回
Could not find 'SubAssembly, Version=3.0.58.0, Culture=neutral, PublicKeyToken=e33b67d3bb5581e4' or or one of its dependencies. File not found.
但是如果尝试自己加载这个子程序集就可以了:
NET.addAssembly(fullfile(fold, 'SubAssembly.dll')); % No issue !!!
我在 C# 中尝试了一个简单的控制台程序(针对 .NET Framework 4.0),加载主程序集没有问题:
static void Main(string[] args)
{
Assembly.LoadFrom(@"c:\FolderWithAllAssembliesAndDependencies\MainAssembly.dll"); // Works fine !!!
}
我正在使用 matlab R2015b 和 R2019a,程序集的目标框架如下:
- MainAssembly.dll => .NET Standard V2.0
- SubAssembly.dll => .NET Framework v4.6
我还尝试将matlab.exe.config
文件(在 matlab 安装文件夹中)修改为以下内容:
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.6"/>
<supportedRuntime version="v4.0"/>
<supportedRuntime version="v2.0.50727"/>
</startup>
<runtime>
<loadFromRemoteSources enabled="true"/>
</runtime>
</configuration>
并重新启动matlab,但它仍然无法加载MainAssembly,我看不出有什么问题(即在上面的简单控制台程序中加载MainAssembly没有问题[即使它仅针对.NET framework v4.0])。
解决方案
MainAssembly.dll => .NET Standard V2.0
SubAssembly.dll => .NET Framework v4.6
那行不通(可能)。您的应用程序集从允许更新的 .NET 运行时的 .NET 2.0 上下文开始,然后尝试加载使用 .NET 4.6 编译的程序集。
您可以尝试加载第SubAssembly
一个,它应该启动一个 .NET 4.6 上下文,然后加载MainAssembly
. 一个更简单的解决方案是MainAssembly
使用 .NET 4.6 编译你的。备份声明的来源:由 Microsoft 员工提供的social.msdn.microsoft.com 。
或者可以创建一个使用 .NET 4.6 编译的 .dll 引用您的文件MainAssembly.dll
,然后在 Matlab 中加载这个新创建的程序集。
如果你真的想深入研究这个,或者认为这是一个不同的问题,你可以使用fuslogvw。该工具将列出所有绑定请求以及哪些程序集请求了哪些依赖项以及它是否成功。
推荐阅读
- c - 在 C 中实现静态函数注册表的可移植方式
- python - pygame.draw.rect 在图像上
- reporting-services - SSRS 表达式 SQL Server 2016 - 由两个代码过滤的 Tablix 现在将它们相互划分
- spring-boot - 没有从字符串值反序列化的字符串参数构造函数/工厂方法('2018-12-14')
- html - 当文本不是干净的结构时如何使用 Xpath 获取文本
- javascript - 我的 jQuery 工作但回调第一次没有工作
- haskell - 递归 Haskell 函数似乎不会终止
- python - 需要一种与 pandas.merge_asof() 进行多对一合并的方法
- image -
在 RST 表的单元格中使用图像时插入的标签?
- javascript - 如何检测消息中的嵌入?