Si c'est site laideron ASP.NET, et l'assembly ne se trouve pas dans le dossier bin du site ou dans le GAC du serveur (et il n'y a rien dans le fichier web.config), peut-être que le site est un sous-site de quelque sorte et l'un des plus hauts du site contient la référence dans le dossier bin (ou quelque chose de louche dans son web.config, puisque les sous-sites/dossiers héritent les web.configs de leurs parents) ? Maintenant, si vous avez un environnement où le fichier est chargé correctement (et cela vous semble), vous pouvez simplement demander à .NET où.dll vient et afficher qu'au lieu, par exemple:
Assembly a = Assembly.Load("Microsoft.VisualStudio.Shell, Version=2.0.0.0, "
+ "PublicKeyToken=b03f5f7f11d50a3a, Culture=Neutral");
Console.WriteLine(a.Location);
chargera un assemblage et afficher son emplacement sur le disque, ma sortie est: C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.Shell\2.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Shell.dll
Si elle est sous « C: \ Windows \ assembly "vous savez que c'est dans le GAC.
Vous pouvez aussi le faire sans appel Assembly.Load si vous référence déjà l'assemblage, vous pouvez énumérer les ensembles chargés dans le courant app.domain et juste imprimer (ou rendre à un contrôle littéral ou Response.Write, etc ...) quelles sont leurs propriétés .Location.
Edit: Le code pour cela ressemble à quelque chose comme ceci:
foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
{
Console.WriteLine(a.GetName().FullName);
Console.WriteLine(a.Location);
Console.WriteLine();
}
Edit: sur un environnement de confiance totale, le code suivant (application de la console) énumérera le GAC et écrire chaque assembly, il devrait être facile de le modifier dans une application ASP.NET, mais je ne suis pas sûr si cela fonctionnera dans un environnement qui est moins de confiance totale (juste deviner ici, vous pourriez avoir de la chance):
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 - avez-vous réussi à résoudre ce problème? – Kev
nop; Je n'étais pas capable de; J'ai plutôt téléchargé les fichiers .dll à partir de torrents (même version) et ils ont fonctionné. Je ne comprends toujours pas d'où ASP .NET ramasse le DLLz s'ils ne sont pas dans le GAC. – effkay