将matlab 2010与NET.addAssembly(MyName)结合使用,如何检查是否已添加某个程序集MyName?
答案 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))