如何检查是否已在Matlab中添加NET程序集?

时间:2011-03-20 14:10:24

标签: .net matlab

将matlab 2010与NET.addAssembly(MyName)结合使用,如何检查是否已添加某个程序集MyName?

5 个答案:

答案 0 :(得分:4)

我找到了一个代码 which checks for added assembly. 也许我可以把它改成像

这样的东西
function flag = IsAssemblyAdded( MyName )

domain = System.AppDomain.CurrentDomain;
assemblies = domain.GetAssemblies;
flag = false;

for i= 1:assemblies.Length

    asm = assemblies.Get(i-1);    
    disp(char(asm.FullName));
    if strcmpi(asm.FullName, MyName)
        flag = true;
    end

end

用于检查程序集是否已加载到matlab。

[编辑]

答案 1 :(得分:2)

尝试使用isempty(which(MyName)) - 我相信如果没有定义/加载MyName,那么这将是空的(即true),否则不是(false)。

答案 2 :(得分:2)

以下在R2013a中有效,并查找程序集短名称:

function loaded = IsAssemblyAdded( MyName )

assembiles = System.AppDomain.CurrentDomain.GetAssemblies;
loaded = false;
i = 0;
while (i < assembiles.Length && ~loaded)
    loaded = strcmp(char(assembiles.Get(i).GetName.Name), MyName);
    i = i + 1;
end

答案 3 :(得分:0)

直接strcmp可能不起作用(至少从2011b开始),因为FullName方法将返回更长的字符串。 E.g:

"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

这样的事情可能会更好:

regexp(char(asm.FullName),['^', MyName, ','],'once')

答案 4 :(得分:0)

这有效:

asm = System.AppDomain.CurrentDomain.GetAssemblies;
any(arrayfun(@(n) strncmpi(char(asm.Get(n-1).FullName), MyName, length(MyName)), 1:asm.Length))