Wenn es plain-jane ASP.NET-Website, und die Assembly befindet sich nicht im bin-Ordner der Site oder im GAC des Servers (und in der Datei web.config ist nichts faul), Vielleicht ist die Site eine Unter-Site irgendeiner Art und eine der höher gelegenen Sites enthält die Referenz im bin-Ordner (oder etwas Fischiges in ihrer web.config, da Sub-Sites/Ordner die Web-Configs ihrer Eltern erben) ?
Nun, wenn Sie eine Umgebung haben, in der die Datei korrekt geladen wird (und es klingt wie Sie), können Sie einfach fragen, wo.dll herkommt und zeigt, dass statt, zum Beispiel:
Assembly a = Assembly.Load("Microsoft.VisualStudio.Shell, Version=2.0.0.0, "
+ "PublicKeyToken=b03f5f7f11d50a3a, Culture=Neutral");
Console.WriteLine(a.Location);
Wird eine Baugruppe geladen und angezeigt seine platte Lage, meine Ausgabe ist: C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.Shell\2.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Shell.dll
Wenn es unter „C: \ Windows \ Assembly \ "Sie wissen, dass es in der GAC ist.
Sie können dies auch ohne Assembly.Load tun, wenn Sie bereits auf die Assembly verweisen, können Sie die in der aktuellen app.domain geladenen Assemblies auflisten und einfach ausdrucken (oder in ein Literal-Steuerelement rendern oder Response.Write, etc ...) was ihre .Location Eigenschaften sind.
Edit: Der Code für das sieht etwa so aus:
foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
{
Console.WriteLine(a.GetName().FullName);
Console.WriteLine(a.Location);
Console.WriteLine();
}
Edit: Auf einer voll vertrauenswürdigen Umgebung, der folgende Code (Konsolenanwendung) wird die GAC aufzählen und schreiben Bei jeder Assembly sollte es leicht sein, sie in eine ASP.NET-App zu ändern, aber ich bin mir nicht sicher, ob sie in einer Umgebung funktioniert, die weniger als voll vertrauenswürdig ist (nur hier können Sie Glück haben):
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 - haben Sie es geschafft, dieses Problem zu lösen? – Kev
nop; Ich war nicht in der Lage zu; Stattdessen habe ich die .dll-Dateien von Torrents heruntergeladen (gleiche Version) und sie haben funktioniert. Ich verstehe immer noch nicht von wo ASP.NET die DLLz abholt, wenn sie nicht in GAC sind. – effkay