Si se trata de Plain Jane sitio ASP.NET, y el ensamblaje no se encuentra en la carpeta bin del sitio ni en el GAC del servidor (y no hay nada sospechoso en el archivo web.config), quizás el sitio es un sub-sitio de algún tipo y uno de los más arriba del sitio contiene la referencia en la carpeta bin (o algo sospechoso en su web.config, ya que los sub-sitios/carpetas heredan los archivos web.configs de sus padres) ?
Ahora, si tiene un entorno donde el archivo se está cargando correctamente (y suena como lo hace), puede simplemente preguntar a .NET dónde.DLL está viniendo y mostrar que en lugar, por ejemplo:
Assembly a = Assembly.Load("Microsoft.VisualStudio.Shell, Version=2.0.0.0, "
+ "PublicKeyToken=b03f5f7f11d50a3a, Culture=Neutral");
Console.WriteLine(a.Location);
cargará una asamblea y mostrar su ubicación en el disco, mi salida es: C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.Shell\2.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Shell.dll
Si es en "C: \ Windows \ Asamblea \ "usted sabe que está en el GAC.
También puede hacer esto sin una llamada Assembly.Load si ya hace referencia al ensamblado puede enumerar los ensamblados cargados en el app.dominio actual y simplemente imprimir (o renderizar a un control literal, o Response.Write, etc ...) cuáles son sus propiedades de .Location.
Editar: El código para que se ve algo como esto:
foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
{
Console.WriteLine(a.GetName().FullName);
Console.WriteLine(a.Location);
Console.WriteLine();
}
Editar: En un entorno de plena confianza, el siguiente código (aplicación de consola) enumerará el GAC y escribir cada ensamblaje, debería ser fácil modificarlo en una aplicación ASP.NET, pero no estoy seguro de si funcionará en un entorno que no sea confiable (solo adivine aquí, puede tener suerte):
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");
}
@effkey - ¿Has logrado solucionar este problema? – Kev
nop; Yo no era capaz de; más bien descargué los archivos .dll de torrents (misma versión) y funcionó. Todavía no entiendo de dónde ASP .NET está recogiendo DLLz si no están en GAC. – effkay