.net 如何检查Matlab中是否已经添加了网络组件?
使用Matlab2010和NET.addAssembly(MyName),我如何检查某些程序集MyName是否已经添加?尝试使用.net 如何检查Matlab中是否已经添加了网络组件?,.net,matlab,.net,Matlab,使用Matlab2010和NET.addAssembly(MyName),我如何检查某些程序集MyName是否已经添加?尝试使用isempty(which(MyName))-我相信如果没有定义/加载MyName,那么它将是空的(即true),否则不会(false)。我找到了一个代码 也许我可以把它改成 function flag = IsAssemblyAdded( MyName ) domain = System.AppDomain.CurrentDomain; assemblies = d
isempty(which(MyName))
-我相信如果没有定义/加载MyName,那么它将是空的(即true),否则不会(false)。我找到了一个代码
也许我可以把它改成
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
[已编辑]由于FullName方法将返回更长的字符串,因此Straight strcmp可能不起作用(至少从2011b开始)。例如:
“mscorlib,版本=4.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089”
类似的方法可能会更好:
regexp(char(asm.FullName),['^',MyName',',']','once')
这项功能:
asm = System.AppDomain.CurrentDomain.GetAssemblies;
any(arrayfun(@(n) strncmpi(char(asm.Get(n-1).FullName), MyName, length(MyName)), 1:asm.Length))
以下代码适用于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
function-load=IsAssemblyAdded(MyName)
assembiles=System.AppDomain.CurrentDomain.GetAssemblies;
加载=错误;
i=0;
而(i
不确定,但您可以尝试exist()
它适用于Java类,所以我希望它也适用于。我已经在多个版本中尝试过('MyName'、'MyName.dll'、'c:\Full\MyName.dll'),但不起作用。即使在加载.net程序集之后,我仍然会得到空(true)值。如果我测试程序集中存在的某个内容(结构、类、方法等),则此方法对我有效。例如isempty(which('MyCompany.MyProduct.MyClass'))
只有当被测试的程序集是最后一个时,这才有效。否则,加载的将再次变为false
。如果已加载,则应具有;打破在您的while中结束
语句