Если это простой сайт ASP.NET, а сборка не находится ни в папке bin сайта, ни в GAC сервера (и в web.config нет ничего подозрительного), возможно, сайт является каким-то дочерним сайтом и один из вышестоящих сайтов содержит ссылку в папке bin (или что-то подозрительное в его web.config, поскольку подсайты/папки наследуют web.configs своих родителей)?
Теперь, если у вас есть среда, в которой файл загружается правильно (и похоже, что вы это делаете), вы можете просто спросить .NET, откуда берется .dll, и вместо этого отобразить это, например:
Assembly a = Assembly.Load("Microsoft.VisualStudio.Shell, Version=2.0.0.0, "
+ "PublicKeyToken=b03f5f7f11d50a3a, Culture=Neutral");
Console.WriteLine(a.Location);
Загрузит сборку и отобразит ее местоположение на диске, мой вывод: C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.Shell\2.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Shell.dll
Если он находится в папке «C:\Windows\assembly\», вы знаете, что он находится в GAC.
Вы также можете сделать это без вызова Assembly.Load, если вы уже ссылаетесь на сборку, вы можете перечислить сборки, загруженные в текущий app.domain, и просто распечатать (или отобразить в буквальном элементе управления или Response.Write и т. д.). ) каковы их свойства .Location.
Редактировать. Код для этого выглядит примерно так:
foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
{
Console.WriteLine(a.GetName().FullName);
Console.WriteLine(a.Location);
Console.WriteLine();
}
Редактировать. В среде с полным доверием следующий код (консольное приложение) будет перечислять GAC и записывать каждую сборку. Его легко преобразовать в приложение ASP.NET, но я не уверен, что это будет работать в среде, которая не соответствует полному доверию (просто предполагаю, что вам может повезти):
static void ProcessFile(string file)
{
try
{
Assembly a = Assembly.LoadFile(file);
Console.WriteLine(a.GetName().FullName);
}
catch { /* do nothing */ }
}
static void ProcessFolder(string folder)
{
foreach (string file in Directory.GetFiles(folder))
{
ProcessFile(file);
}
foreach (string subFolder in Directory.GetDirectories(folder))
{
ProcessFolder(subFolder);
}
}
static void Main(string[] args)
{
ProcessFolder(@"C:\Windows\Assembly");
}
person
BrainSlugs83
schedule
17.02.2012