Tout en poursuivant a spearate problem je suis venu à une situation très particulière. Un code de démonstration serait:Quand est-ce que .net vérifie les dépendances d'assembly?
public class Global : HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
Log("In Application_Start");
SomeClass.SomeProp = ConfigurationManager.AppSettings["PropValue"];
}
protected void Application_BeginRequest(object sender, EventArgs e)
{
Log("In Application_BeginRequest");
try
{
this.Application_Start(null, null);
}
catch (Exception ex)
{
Log(ex.ToString());
}
Log("At the end of Application_BeginRequest");
}
}
Ce que je reçois dans mon journal est:
In Application_BeginRequest
Could not load file or assembly 'vjslib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
System.IO.FileNotFoundException
at MyRootNamespace.Global.Application_Start(Object sender, EventArgs e)
at MyRootNamespace.Global.Application_BeginRequest(Object sender, EventArgs e) in D:\My Documents\Visual Studio 2008\Projects\SolutionDir\ProjectDir\Global.asax.cs:line 109
At the end of Application_BeginRequest
Cela n'a aucun sens pour moi que ce soit. Tenir compte:
vjslib
est référencé par mon projet principal (assemblage) qui comprend la classeGlobal
. Pourquoi l'assembly a-t-il été chargé si ses dépendances n'ont pas pu être résolues?SomeClass
est dans un autre ensemble qui fait également référence àvjslib
.SomeClass
utilisevjslib
et certains membres exposent des classes dérivées de classes dansvjslib
, mais la propriété utilisée ici est simplement une ancienne chaîne.- Pourquoi n'y a-t-il pas de numéro de ligne dans la première ligne de la trace de la pile?
Les dépendances sont-elles résolues par méthode? Je pensais que Microsoft doesn't do such things anymore. Que se passe t-il ici?
C'est une possibilité, mais lisez ensuite mon dernier lien (celui sur "Microsoft ne fait plus de telles choses"). –
@Vilx, le lien que vous avez fourni ne parle que des DLL non managées référencées par l'importation DLL et non des assemblées managées. Les assemblages gérés ne sont pas référencés par des fonctions d'importation, mais ils sont référencés via des métadonnées (entrées AssemblyRef). BTW, j'ai édité ma réponse pour énumérer quelques autres sources. – VinayC
Je pensais qu'ils auraient appris de leurs erreurs passées, même si elles ont été faites dans un autre département. Tant pis. Quoi qu'il en soit, merci pour le lien, qui a éclairci les choses! –