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: Ссылка
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
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)
Es ist einfach und es ist seltsam, dass es nicht für dich funktioniert hat. Ich habe gerade überprüft und das funktioniert:
ThirdParty.dll
zum Lib
-Projekt hinzu. Build Action
sollte auf Content
(der Standardwert) gesetzt werden !!! Copy to Output Directory
auf Copy if newer
oder Copy always
setzen
Lib
von App
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%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.
Tags und Links dependencies c# visual-studio-2010 projects-and-solutions