Se è plain-jane sito ASP.NET, e l'assembly non si trova nella cartella bin del sito o nel GAC del server (e non c'è nulla di pericoloso nel web.config), forse il sito è un sito secondario di qualche tipo e uno dei siti più in alto contiene il riferimento nella cartella bin (o qualcosa di interessante nel suo web.config, dal momento che siti secondari/cartelle ereditano i web.configs dei loro genitori) ?
Ora, se si dispone di un ambiente in cui il file viene caricato correttamente (e suona come si fa), è sufficiente chiedere a .NET dove si trova.dll è in arrivo da e visualizzare che invece, per esempio:
Assembly a = Assembly.Load("Microsoft.VisualStudio.Shell, Version=2.0.0.0, "
+ "PublicKeyToken=b03f5f7f11d50a3a, Culture=Neutral");
Console.WriteLine(a.Location);
caricherà un assieme e visualizzare la relativa posizione su disco, la mia uscita è: C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.Shell\2.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Shell.dll
Se è sotto "C: \ Windows \ assembly \ "sai che è nel GAC.
È inoltre possibile eseguire questa operazione senza una chiamata Assembly.Load se si fa già riferimento all'assembly, è possibile enumerare gli assembly caricati nell'app.dominio corrente e stampare (o eseguire il rendering su un controllo letterale o su Response.Write, ecc ...) quali sono le loro proprietà .Location.
Edit: Il codice per che sembra qualcosa di simile:
foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
{
Console.WriteLine(a.GetName().FullName);
Console.WriteLine(a.Location);
Console.WriteLine();
}
Edit: In un ambiente di fiducia piena, il seguente codice (console app) sarà enumerare la GAC e scrivere ogni assembly, dovrebbe essere facile modificarlo in un'app ASP.NET, ma non sono sicuro che funzionerà in un ambiente che non è completamente affidabile (basta indovinare qui, potresti essere fortunato):
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: sei riuscito a risolvere questo problema? – Kev
nop; Non ero in grado di; piuttosto ho scaricato i file .dll di torrent (stessa versione) e hanno funzionato. Non riesco ancora a capire da dove ASP .NET preleva il DLLz se non si trova in GAC. – effkay