2009-04-14 2 views
0

Ich habe folgende Client-Anwendung und die entsprechende config Datei:Warum hilft meine Codebasis App.Config .NET nicht, meine Assembly zu finden?

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> 

Die AssemblyPrivate.exe keinen öffentlichen Schlüssel besitzt, noch ist es im GAC befindet. Soweit ich weiß, sollte die Laufzeitumgebung die Datei app.config analysieren, bevor sie nach einer Assembly im Client-Anwendungsverzeichnis sucht.

Die nicht behandelte Ausnahme (zur besseren Lesbarkeit umgebrochen) ist:

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. 

Warum es funktioniert nicht? Ich brauche dynamische Bindung (nicht statisch).

Mit freundlichen Grüßen, PK

+0

Was ist die Beziehung zwischen dem Weg des Haupt exe und die Montage (ist es in einem Unterverzeichnis)? – stevehipwell

+0

Ja. Es befindet sich im Unterverzeichnis. – pkolodziej

Antwort

0

nicht übersehen, dass "oder eine ihrer Abhängigkeiten". Sind Sie sicher, dass alle Abhängigkeiten von AssemblyPrivate.exe verfügbar sind?

+0

AssemblyPrivate ist nur eine statische void main mit Console.WriteLine so - Ja, ich bin mir sicher. – pkolodziej

+0

Haben Sie versucht, den vollständigen Pfad als Argument für die ExecuteAssembly-Methode zu verwenden? Im Standard-Windows-Formular, nicht als URL? –

+0

Codebase wurde eingeführt, um keine Pfade fest zu codieren. – pkolodziej

0

Sie lösen dieses Problem wahrscheinlich auf eigene Faust jetzt, also nur als Referenz:

Ich glaube, Sie ein „assembly“ Element fehlt. Wenn Sie es zusätzlich zum codeBase-Element angeben, sollte es funktionieren.

<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> 

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

+0

Q: "Die' AssemblyPrivate.exe' hat nicht ein öffentlicher Schlüssel ", das ist das Problem. – hypersw

Verwandte Themen