Ich habe zwei Lösungen, die einen gemeinsamen Code haben, daher möchte ich ihn extrahieren und zwischen ihnen teilen. Darüber hinaus möchte ich in der Lage sein, diese Bibliothek unabhängig freizugeben, da sie für andere nützlich sein könnte.
- Wie geht das am besten mit Visual Studio 2008?
- Ist ein Projekt in mehr als einer Lösung vorhanden?
- Habe ich eine separate Lösung für den separaten Code?
- Kann eine Lösung von einer anderen abhängen?
.net
visual-studio
code-sharing
pupeno
quelle
quelle
Antworten:
Ein Projekt kann von mehreren Lösungen referenziert werden.
Fügen Sie Ihre Bibliothek oder Ihren Kerncode in ein Projekt ein und verweisen Sie dann in beiden Lösungen auf dieses Projekt.
quelle
Sie können eine Codedatei zwischen zwei Projekten "verknüpfen". Klicken Sie mit der rechten Maustaste auf Ihr Projekt, wählen Sie
Add
->Existing item
und klicken Sie dann auf den Abwärtspfeil neben derAdd
Schaltfläche:Nach meiner Erfahrung ist das Verknüpfen einfacher als das Erstellen einer Bibliothek. Verknüpfter Code führt zu einer einzelnen ausführbaren Datei mit einer einzelnen Version.
quelle
File > Add > Existing Project...
Mit dieser Option können Sie Ihrer aktuellen Lösung Projekte hinzufügen. Fügen Sie dies einfach hinzu, da keiner der oben genannten Beiträge darauf hinweist. Auf diese Weise können Sie dasselbe Projekt in mehrere Lösungen aufnehmen.quelle
Sie können ein Projekt in mehrere Lösungen aufnehmen. Ich glaube nicht, dass ein Projekt ein Konzept dafür hat, zu welcher Lösung es gehört. Eine andere Alternative besteht jedoch darin, die erste Lösung an einem bekannten Ort zu erstellen und auf die kompilierten Binärdateien zu verweisen. Dies hat den Nachteil, dass Sie ein wenig arbeiten müssen, wenn Sie auf verschiedene Versionen verweisen möchten, je nachdem, ob Sie Release- oder Debug-Konfigurationen einbauen.
Ich glaube nicht, dass Sie eine Lösung tatsächlich von einer anderen abhängig machen können, aber Sie können Ihre automatisierten Builds in einer geeigneten Reihenfolge über benutzerdefinierte Skripte ausführen. Behandeln Sie Ihre gemeinsame Bibliothek grundsätzlich so, als wäre es eine andere Abhängigkeit von Drittanbietern wie NUnit usw.
quelle
Sie können Platzhalter mit der folgenden Technik inline platzieren (auf diese Weise wird die Lösung von @ Andomar in der .csproj gespeichert).
Einstellen:
Wenn Sie die Dateien ausblenden und / oder verhindern möchten, dass der Platzhalter erweitert wird, wenn Sie ein Element wie
MySisterProject
oben beschrieben zu einem Ordner "Virtuell vorhandenes Element" hinzufügen oder daraus entfernen .quelle
<Import
in .csproj-Dateien gespeichert sind, zwischengespeichert werden, bis Sie die Lösungen wie gesagt neu laden.Sie würden einfach ein separates Klassenbibliotheksprojekt erstellen, das den allgemeinen Code enthält. Es muss nicht Teil einer Lösung sein, die es verwendet. Verweisen Sie auf die Klassenbibliothek aus jedem Projekt, das sie benötigt.
Der einzige Trick besteht darin, dass Sie einen Dateiverweis verwenden müssen, um auf das Projekt zu verweisen, da dieser nicht Teil der Lösungen ist, die darauf verweisen. Dies bedeutet, dass die eigentliche Ausgabebaugruppe an einem Ort platziert werden muss, auf den jeder zugreifen kann, der ein Projekt erstellt, das darauf verweist. Dies kann beispielsweise durch Platzieren der Baugruppe auf einer Freigabe erfolgen.
quelle
Sie können dasselbe Projekt in mehr als eine Lösung aufnehmen, aber Sie werden garantiert irgendwann auf Probleme stoßen (relative Pfade können ungültig werden, wenn Sie beispielsweise Verzeichnisse verschieben).
Nachdem ich jahrelang damit zu kämpfen hatte, fand ich endlich eine praktikable Lösung, aber dafür müssen Sie Subversion für die Quellcodeverwaltung verwenden (was keine schlechte Sache ist).
Fügen Sie auf der Verzeichnisebene Ihrer Lösung eine svn: externals- Eigenschaft hinzu, die auf die Projekte verweist, die Sie in Ihre Lösung aufnehmen möchten. Subversion zieht das Projekt aus dem Repository und speichert es in einem Unterordner Ihrer Lösungsdatei. Ihre Lösungsdatei kann einfach relative Pfade verwenden, um auf Ihr Projekt zu verweisen.
Wenn ich mehr Zeit finde, erkläre ich dies ausführlich.
quelle
svn:externals
harte Links zu einem Repository. Wenn Sie das Repository verschieben, verweisen die externen Links weiterhin auf das alte Repository.Extrahieren Sie den allgemeinen Code in ein Klassenbibliotheksprojekt und fügen Sie dieses Klassenbibliotheksprojekt Ihren Lösungen hinzu. Anschließend können Sie einen Verweis auf den allgemeinen Code aus anderen Projekten hinzufügen, indem Sie einen Projektverweis auf diese Klassenbibliothek hinzufügen. Der Vorteil einer Projektreferenz im Gegensatz zu einer Binär- / Assemblyreferenz besteht darin, dass das Common Class Library-Projekt auch basierend auf dieser Konfiguration erstellt wird, wenn Sie Ihre Build-Konfiguration in Debug, Release, Custom usw. ändern.
quelle
Es ist eine gute Idee, eine DLL-Klassenbibliothek zu erstellen, die alle gängigen Funktionen enthält. Jede Lösung kann unabhängig von anderen Lösungen unabhängig auf diese DLL verweisen.
Tatsächlich sind unsere Quellen in meiner Arbeit so organisiert (und ich glaube an viele andere Orte).
Die Lösung kann übrigens nicht explizit von einer anderen Lösung abhängen.
quelle
Zwei Hauptschritte sind:
1- Erstellen einer C ++ - DLL
Im visuellen Studio
Header-Dateicode
Cpp-Datei
Überprüfen Sie dies
Diese Option sollte Dynamic Library (.dll) sein und die Lösung / das Projekt jetzt erstellen.
Die Datei first_dll.dll wird im Debug-Ordner erstellt
2- Verknüpfen im C # -Projekt
Öffnen Sie das C # -Projekt
Fügen Sie diese Zeile oben im C # -Projekt hinzu
Jetzt kann auf die Funktion von DLL mit der folgenden Anweisung in einigen Funktionen zugegriffen werden
Ich habe DLL in C ++ Projekt in VS2010 erstellt und es in VS2013 C # Projekt verwendet. Es funktioniert gut.
quelle
Sie können einen internen NuGet-Server hosten und die allgemeinen Bibliotheken freigeben, die in anderen Projekten intern und extern freigegeben werden.
Weiter auf dieser Lese
quelle
Wenn Sie versuchen, Code für zwei verschiedene Projekttypen freizugeben (z. B. Desktop-Projekt und mobiles Projekt), können Sie in den Ordner für freigegebene Lösungen schauen . Ich muss das für mein aktuelles Projekt tun, da sowohl für mobile als auch für Desktop-Projekte identische Klassen erforderlich sind, die sich nur in einer Datei befinden. Wenn Sie diesen Weg gehen, können alle Projekte, mit denen die Datei verknüpft ist, Änderungen daran vornehmen, und alle Projekte werden anhand dieser Änderungen neu erstellt.
quelle
Es gibt einen sehr guten Fall für die Verwendung des "Hinzufügens vorhandener Dateilinks", wenn Code projektübergreifend wiederverwendet wird. In diesem Fall müssen Sie auf verschiedene Versionen abhängiger Bibliotheken verweisen und diese unterstützen.
Das Erstellen mehrerer Assemblys mit Verweisen auf verschiedene externe Assemblys ist ansonsten nicht einfach, ohne Ihren Code zu duplizieren oder Tricks mit Quellcodeverwaltung zu verwenden.
Ich glaube, dass es am einfachsten ist, ein Projekt für die Entwicklung und den Komponententest zu verwalten und dann Projekte mit vorhandenen Dateilinks zu erstellen, wenn Sie Assemblys erstellen müssen, die auf verschiedene Versionen dieser externen Assemblys verweisen.
quelle
Eine einfachere Möglichkeit, eine Klassendatei eines Projekts in ein anderes Projekt aufzunehmen, besteht darin, das Projekt in eine vorhandene Lösung einzufügen und anschließend die DLL-Referenz des neuen Projekts in das vorhandene Projekt einzufügen. Schließlich können Sie die Methoden der hinzugefügten Klasse verwenden, indem Sie sie mit der Direktive oben in einer beliebigen Klasse dekalieren.
quelle
Wenn Sie ab VisualStudio 2015 Ihren gesamten Code in einer Lösung behalten, können Sie Code freigeben, indem Sie ein freigegebenes Projekt hinzufügen . Fügen Sie dann für jedes Projekt, in dem Sie den Code verwenden möchten, einen Verweis auf dieses freigegebene Projekt sowie die richtigen Verwendungsanweisungen hinzu.
quelle
Jetzt können Sie das freigegebene Projekt verwenden
Weitere Informationen finden Sie hier
quelle