Wie notwendig die Dateien auf den Ausgang der unabhängige client-Projekt?
Meine Lösung besteht aus:
Client
- startup-Projekt, UI-Schicht. Hängt ab von: App
App
- library, application layer, assembler. Hängt ab von: Lib1
, ...
Lib1
- Bibliothek, ein business logic layer. Muss eine bestimmte Datei richtig zu arbeiten: ThirdParty.dll
Habe ich ThirdParty.dll
zu den Lib1
Projekt (Add
> Existing Item...
> Add
), und setzen Sie Copy to Output Directory
Eigentum der dll-Datei Copy Always
. Nun ist die dll-Datei ist kopiert Lib1
Ausgabe und der App
Ausgabe, aber nicht um die Client
Ausgang, wo ich es brauchen.
Was ist die richtige (einfach? offensichtlich ist?) Möglichkeit zum kopieren ThirdParty.dll
dem Ausgang Client
auf jede Lösung bauen?
UPD
ThirdParty.dll
ist keine Referenz. Tatsächlich, das ist eine andere Referenz-Abhängigkeit. Meine Frage ist, angewendet auf eine beliebige Datei, die muss in den Ordner der ausgeführten Anwendung.
Aufgezeichneten Videos, um sicher zu sein ich Tue es rechts: http://youtu.be/QwS2tOIc5yQ
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorhandenes Element hinzufügen als Link:
Ich hatte ein ähnliches Problem in
VS2010
und ich irgendwie endete das hinzufügen der Datei alsLink
und das aktualisieren der EigenschaftCopy Always
.In Ihrem Fall, in
CLIENT
- Projekt, fügen SieThirdParty.dll
alsLink
(Hinzufügen > Vorhandenes Element > Hinzufügen-Link) und setzen SieCopy to Output Directory
Eigentum der dll-DateiCopy Always
.Hinweis: Es würde kopieren Sie die Ordner-Hierarchie-Projekt-Knoten.
Nur für Referenz: ich war eigentlich mit einer open-source -LibGit2Sharp, die benötigt eine dll - (libGit2.dll) in das Ausgabe-Verzeichnis. Daher ist in der UI-Schicht, die Hinzugefügt hatte Anwendungsschicht mit
LibGit2Sharp.dll
als Referenz; ich musste hinzufügenlibGit2.dll
alsLink
+Copy Always
. Dies war die empfohlene Lösung.Post-Build:
Die andere option könnte sein, schreiben einen post-build-Skripte für
CLIENT
Wissen, wie die
Copy
aufMSBuild
funktioniert, könnten Sie findenMicrosoft.Common.targets
- Datei (sollte verfügbar sein @ C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets in Ihrem system ist)C:\windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
. Es gibt keine c:\Windows\Microsoft.NET\Framework\v4.5.*\. Auch VS 2012 verwendetC:\windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets
- das gleiche wie VS 2010.Es ist einfach und es ist merkwürdig, dass es nicht für Sie arbeiten. Ich habe gerade überprüft und es funktioniert:
ThirdParty.dll
zu denLib
Projekt.Build Action
sollteContent
(Standardwert) !!!Copy to Output Directory
zuCopy if newer
oderCopy always
Lib
ausApp
App
ausClient
Dies funktioniert in Visual Studio 2012, aber scheint nicht zu funktionieren in Visual Studio 2010.
VS2010:
VS2012:
Zitat von der .Ziel-Dateien:
ThirdParty.dll
kopiertClient
Ausgang? Ich sehe es inApp
Projekt nur Ausgang.Build Action
fürThirdParty.dll
eingestellt istContent
? Ich kann zip-und meine Lösung (VS 2012), wenn ich nach Hause komme.Build Action
istContent
. Im mit VS2010 - das könnte es sein bug? Mein video angucken, alles ist sehr einfach: youtu.werden/QwS2tOIc5yQClient/bin/Debug
mit dem Explorer. Mit der rechten Maustaste aufClient
und wählen SieBuild
, dann wechseln Sie zum Explorer und suchen Sie auf die neuen Dateien.BuildingProject
Eigenschaft irgendwie seltsam false ausgewertet wird. VS2010 führt mehr Ziele und irgendwie verliert der Enkel content-Dateien in den Prozess.Könnten Sie(in visual studio) Lib1 Projekt-Eigenschaften -> Build-Ereignisse -> Post-build event command line.
In der "Post-build event command line" edit-box geben Sie kopieren Kommandos, kopieren Sie die erforderlichen Dateien an die Client-Ausgabe-Ordner. In diesem Eingabefeld können Sie verschiedene VS-Makros (Klicken Sie auf "Edit Post-Build" -> Makros)
Wie diese:
Vielleicht, müssen Sie die "Build"->"Rebuild Solution" zum ersten mal.
Lib1
wird abhängig vonClient
Projekt. Ich denke, das ist falsch, wieClient
dependant auf all diese Dateien von Drittanbietern. Wenn die Wahl zwischen allen schlechten Lösungen würde ich bevorzugen das hinzufügen von Dateien zuClient
(Add => Vorhandenes Element...)