2012-04-04 5 views
6

Ich habe ein ausführbares Projekt, sagen wir A, die ein anderes ausführbares Projekt B im Lauf startet. Um einen B.exe in A's aktuellen Arbeitsordner zu haben, füge ich B als A's Referenz hinzu, so dass nach der Kompilierung ein B.exe in den Ordner A kopiert wird. Allerdings habe ich bemerkt, dass die Konfiguration, die ich für B mache, nicht in A's Ordner kopiert oder erzeugt wird (es gibt keine Datei B.exe.config in A 's Ordner, nur B.exe), und daher ist das Zeug wie Tracing für B nicht richtig konfiguriert.Wie können die App.config-Informationen in eine Referenzdatei in .NET integriert werden?

Ich kann natürlich die B.exe.config manuell zu A Ordner kopieren, aber ich wette, es gibt einige automatische Möglichkeit, das zu tun. Könnte mir jemand helfen?

+0

Wie startet A.exe B..exe? Wenn Sie es nicht im Code verwenden, machen Sie keinen Verweis. Erstellen Sie ein Post-Build-Skript (oder etwas), das es in den richtigen Ordner kopiert. Im Allgemeinen gibt es nur eine .config-Datei pro Anwendungsdomäne, deshalb wird die Konfiguration von B nicht kopiert, sollte in der A..exe.config sein, wenn darauf verwiesen wird (dies ist kein automatischer Prozess). – albertjan

+0

@the_ajp Danke für Ihre Antwort. Ich starte in der Tat B..exe in Code aus 2 Gründen: 1) A.exe ist eine 64-Bit-App und B.exe ist 32 Bit, also kann A.exe B nicht in seine App-Domäne laden. 2) Ich möchte, dass B..exe jedes Mal beendet wird, wenn A.exe existiert. Meinst du, ein Postbuild-Skript wäre die beste Praxis? – tete

Antwort

-1

Sie können nicht 2 app.configs in Ihrem Anwendungsverzeichnis haben.
Visual Studio verwendet standardmäßig die App.config des Startprojekts.
Sie könnten einen Post-Build-Ereignis-Trigger erstellen, wo Sie die app.config kopieren, aber das würde die ursprüngliche app.config (die ich vermute, enthält Daten, die Sie benötigen) ersetzen.

Der beste Ansatz (abgesehen von der Erstellung einer sauberen dll + -Projektarchitektur) besteht darin, alle Konfigurationsdaten von Projekt A manuell in Konfigurationsdaten von Projekt B zusammenzuführen.

+0

Es würde app.config nicht überschreiben, weil die app.config von b.exe b.exe.config heißt und nicht a.exe.config. Und du kopierst im Grunde meinen Kommentar :(. Was ich nicht als Antwort gepostet habe, weil wir noch nicht wissen, wie b.exe verwendet wird. – albertjan

+0

Die Seite wurde nicht aktualisiert, bevor ich sie einreichte, aber ich kann dir versichern, dass ich es nicht getan habe Plagiat begehen Ich habe es als Antwort gepostet, weil ich das Gefühl hatte, dass das Verschmelzen der 2 App-Configs sein Problem lösen würde. – Kristof

+0

In Ordnung :) hehe. Es wird und wenn nicht das Nachbau-Event wird. – albertjan

5

können Sie verwenden, um Ereignisse Post-Build, oder ...

Im Projekt A, einen Link Verweis auf B.exe.config hinzuzufügen. Dazu fügen Sie dem Projekt ein vorhandenes Element hinzu. Bevor Sie jedoch die Schaltfläche Hinzufügen im Dateidialogfeld drücken, klicken Sie auf den Abwärtspfeil rechts neben der Schaltfläche Hinzufügen und wählen Sie "Als Verknüpfung hinzufügen". Stellen Sie dann die Datei so ein, dass sie in das Ausgabeverzeichnis kopiert wird. In der Projektdatei, wird es wie folgt aussehen:

Von ProjectA.csproj:

<None Include="..\ProjectB\bin\Debug\B.exe.config"> 
    <Link>B.exe.config</Link> 
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
</None> 

Wenn Sie nicht manuell die Projektdatei bearbeiten, die enthaltene Datei auf der Build-Konfiguration abhängen kann nichts dagegen. Die folgenden Arbeiten für Builds (obwohl VS2013 wird die Datei nicht öffnen, wenn Sie einen Doppelklick auf das Icon im Projektbaum.)

<None Include="..\ProjectB\bin\$(Configuration)\B.exe.config"> 
    <Link>B.exe.config</Link> 
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
</None> 
+0

Haben Sie eine Idee, warum dieser Ansatz auf einem Team Foundation Build Server nicht funktioniert? – pquest

+0

@pquest Ich tue es nicht, aber ich habe einen anderen Datenpunkt für Sie. Ich habe es gerade mit VS 2015 und VisualStudio.com Account mit TFS 2015 getestet. Es hat funktioniert. Im Protokoll kann ich es sehen "Kopieren von Datei von ProjectB \ bin \ Release \ ProjectB.exe.config zu ProjectA \ bin \ Release \ ProjectB.exe.config" und später "Kopieren von ProjectA \ bin \ Release \ ProjectB.exe .config in den Ablageordner. Ich habe die Variable $ (Configuration) in meinem Link zur Konfigurationsdatei verwendet. – Wally

5

Eine viel einfachere Lösung wäre die folgende in der csproj Datei einfach enthalten. Dazu gehören die übereinstimmenden Dateierweiterungen für die referenzierten Dateien.

<PropertyGroup> 
    <AllowedReferenceRelatedFileExtensions> 
     .pdb; 
     .xml; 
     .exe.config; 
     .dll.config 
    </AllowedReferenceRelatedFileExtensions> 
    </PropertyGroup> 
+0

AllowedReferenceRelatedFileExtensions nicht erkannt – Loaderon

Verwandte Themen