Wie werden notwendige Dateien in die Ausgabe eines unabhängigen Client-Projekts eingefügt?

8

Meine Lösung besteht aus:

Client - Startprojekt, UI-Ebene. Abhängig von: App

App - Bibliothek, Anwendungsschicht, Assembler. Abhängig von: Lib1 , ...

Lib1 - Bibliothek, Geschäftslogikebene. Benötigt eine bestimmte Datei, um ordnungsgemäß zu funktionieren: ThirdParty.dll

Ich habe ThirdParty.dll zum Lib1 Projekt hinzugefügt ( Add & gt; Existing Item... & gt; Add ) und Copy to Output Directory Eigenschaft der DLL Datei auf Copy Always gesetzt. Jetzt wird die DLL-Datei in die Ausgabe Lib1 und in die Ausgabe App kopiert, aber nicht in die Ausgabe Client , wo ich sie brauche.

Was ist der richtige (einfache? offensichtliche?) Weg, um ThirdParty.dll in die Ausgabe von Client für jede Lösung zu kopieren?

UPD ThirdParty.dll ist keine Referenz. Eigentlich ist das eine weitere Referenzabhängigkeit. Meine Frage wird auf jede Datei angewendet, die sich im Ordner der laufenden Anwendung befinden muss.

Aufgenommenes Video, um sicher zu sein, dass ich es richtig mache: Ссылка

    
astef 28.05.2013, 11:49
quelle

3 Antworten

9

Vorhandenes Element als Verknüpfung hinzufügen:

Ich hatte ein ähnliches Problem in VS2010 und habe am Ende die Datei als Link hinzugefügt und ihre Eigenschaft auf Copy Always aktualisiert.

In Ihrem Fall, in CLIENT project, fügen Sie ThirdParty.dll als Link hinzu (Add & gt; Existierendes Objekt & gt; Als Link hinzufügen) und setzen Copy to Output Directory Eigenschaft der DLL-Datei auf Copy Always . Hinweis : Es würde die Ordnerhierarchie vom Projektknoten kopieren.

Nur zum Nachschlagen: Ich habe tatsächlich eine Open Source LibGit2Sharp verwendet, die eine dll (libGit2) benötigt .dll) im Ausgabeverzeichnis verfügbar sein. Daher in der UI-Ebene, die den Anwendungs-Layer mit LibGit2Sharp.dll als Referenz hinzugefügt hat; Ich musste libGit2.dll als Link + Copy Always hinzufügen. Dies war eine empfohlene Lösung.

Post Build:

Die andere Möglichkeit könnte sein, Post-Build-Skripte für CLIENT

zu schreiben

Um zu erfahren, wie Copy auf MSBuild funktioniert, können Sie auf Microsoft.Common.targets file verweisen (sollte in C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets verfügbar sein Ihr System)

%Vor%     
jacob aloysious 04.06.2013, 03:22
quelle
4

Es ist einfach und es ist seltsam, dass es nicht für dich funktioniert hat. Ich habe gerade überprüft und das funktioniert:

  1. Fügen Sie ThirdParty.dll zum Lib -Projekt hinzu.
  2. Der Build Action sollte auf Content (der Standardwert) gesetzt werden !!!
  3. Copy to Output Directory auf Copy if newer oder Copy always setzen
  4. Referenz Lib von App
  5. Referenz App von Client

Dies funktioniert in Visual Studio 2012, scheint aber in Visual Studio 2010 nicht zu funktionieren.

VS2010:

%Vor%

VS2012:

%Vor%

Zitat aus den .target-Dateien:

%Vor%     
Ark-kun 31.05.2013 01:11
quelle
1

Sie könnten (in Visual Studio) Lib1-Projekteigenschaften - & gt; Ereignisse erstellen - & gt; Befehlszeile nach dem Build-Ereignis.

Geben Sie im Eingabefeld "Post-Build-Ereignis-Befehlszeile" die Befehle copy ein, die die erforderlichen Dateien in den Client-Ausgabeordner kopieren. In dieser Editbox können Sie verschiedene VS-Makros verwenden (Klicken Sie auf "Post-Build bearbeiten" -> Makros) So:

%Vor%

Vielleicht müssen Sie "Build" - & gt; "Rebuild Solution" zum ersten Mal erstellen.

    
Vlad I. 30.05.2013 12:31
quelle