private IEnumerable<Tuple<Assembly,string >> getmacronamespaces(CompilerContext context) {
if (context["macronamespaces"] == null)
{
var macronamespaces = new List<Tuple<Assembly, string>>();
context["macronamespaces"] = macronamespaces;
foreach (ICompileUnit reference in context.References) {
try {
var a = reference.getPropertySafe<Assembly>("Assembly");
// импортирует автоматически макросы только из библиотек Comdiv - иначе жестокие тормоза и смысла главное никакого
if (a != null) {
var n = a.GetName().Name;
//HACK: due to performance issues uses only comdiv based libriries
if (!n.StartsWith("Comdiv.")) continue;
if (n.EndsWith(".Test")||n.EndsWith(".Tests")) continue;
var attrs = a.GetCustomAttributes(typeof(AssemblyBooMacroNamespaceAttribute), false);
if (attrs.Length != 0)
{
foreach (
string ns in
attrs.Cast<AssemblyBooMacroNamespaceAttribute>().Select(x => x.Namespace))
{
macronamespaces.Add(Tuple.Create(a, ns));
}
}
}
}
catch (Exception ex) {
context.TraceInfo("ошибка импорта пространства имен " + ex.Message);
}
}
}
return (IEnumerable<Tuple<Assembly, string>>) context["macronamespaces"];
}