开发者

How to check if NET assembly was already added in Matlab?

Using matlab 2010 with NET.addAssemb开发者_如何转开发ly(MyName), how do I check whether certain assembly MyName was already added or not?


I've found a code which checks for added assembly. Maybe I can alter it to something like

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

for checking whether the assembly is loaded to matlab or not.

[edited]


try using isempty(which(MyName)) - I believe that if MyName is not defined/loaded then this will be empty (i.e., true), otherwise not (false).


The following works in R2013a and looks for the assembly short name:

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


Straight strcmp may not work (at least as of 2011b) as the FullName method will return a much longer string. E.g:

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

Something like this might work better:

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


This works:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜