2009-04-14 12 views
0

J'ai l'application cliente suivante et son fichier config correspondant:Pourquoi ma base de code App.Config n'aide-t-elle pas .NET à localiser mon assembly?

namespace Chapter9 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      AppDomain.CurrentDomain.ExecuteAssembly("AssemblyPrivate.exe"); 
     } 
    } 
} 

<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <codeBase href="file://C:\Users\djpiter\Documents\Visual Studio 2008\Projects\70536\AssemblyPrivate\bin\Debug\AssemblyPrivate.exe"/> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

Le AssemblyPrivate.exe n'a pas une clé publique, ni situé dans le GAC. Pour autant que je sache, le runtime doit analyser le fichier app.config avant de rechercher un assembly dans le répertoire de l'application cliente.

L'exception non gérée (encapsulées de lisibilité) est:

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 
'file:///C:\Users\djpiter\Documents\Visual Studio 2008\Projects\70536\Chapter9\bin\Debug\AssemblyPrivate.exe' 
or one of its dependencies. The system cannot find the file specified. 

Pourquoi il ne fonctionne pas? J'ai besoin d'utiliser une liaison dynamique (pas statique).

Cordialement, PK

+0

Quelle est la relation entre le chemin du principal exe et l'ensemble (est dans un sous-dossier)? – stevehipwell

+0

Oui. Il est situé dans le sous-répertoire. – pkolodziej

Répondre

0

Ne négligez pas que "ou une de ses dépendances". Êtes-vous sûr que toutes les dépendances de AssemblyPrivate.exe sont disponibles?

+0

AssemblyPrivate est juste un vide principal statique avec Console.WriteLine donc - Oui, j'en suis sûr. – pkolodziej

+0

Avez-vous essayé d'utiliser le chemin complet comme argument de la méthode ExecuteAssembly? Dans le formulaire Windows standard, pas comme URL? –

+0

Codebase a été introduit pour ne pas coder en dur les chemins. – pkolodziej

0

Vous avez probablement résolu ce problème sur votre propre maintenant, donc juste pour la référence:

Je crois que vous manque un élément « assemblyIdentity ». Si vous le spécifiez en plus de l'élément codeBase, cela devrait fonctionner.

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="office" 
        publicKeyToken="71e9bce111e9429c" /> 
     <codeBase href="Microsoft.Office.Interop.v11.dll" version="11.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 

Voir http://msdn.microsoft.com/en-us/library/b0yt6ck0%28v=VS.100%29.aspx

+0

Q: "The' AssemblyPrivate.exe' n'a pas une clé publique ", c'est le problème. – hypersw