Это чисто информационное сообщение, в котором говорится, что оно влияет на время загрузки сборки; но на самом деле сборки загружаются в первый раз, когда метод / тип, использующий их, подвергается JITted (или доступ через отражение и т. д.)
Вот пример, показывающий, что это не имеет значения; с using
в любом месте вывод одинаков: System.Core
загружается, когда Bar
получает JITted:
pre-Bar
System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
pre-Max
Max: 5
post-Max
post-Bar
пример (запускается из командной строки, а не в отладчике; в идеале в конфигурации выпуска):
using System;
//using System.Linq;
namespace Foo {
using System.Linq;
class Program {
static Program() {
AppDomain.CurrentDomain.AssemblyLoad += (s, a) => {
Console.WriteLine(a.LoadedAssembly.FullName);
};
}
static void Main() {
Console.WriteLine("pre-Bar");
Bar();
Console.WriteLine("post-Bar");
Console.ReadLine();
}
static void Bar() {
Console.WriteLine("pre-Max");
int[] data = { 1, 2, 3, 4, 5 };
Console.WriteLine("Max: " + Enumerable.Max(data));
Console.WriteLine("post-Max");
}
}
}