it-swarm.com.de

Wie geben Sie Code zwischen Projekten/Lösungen in Visual Studio frei?

Ich habe zwei Lösungen, die einen gemeinsamen Code haben, also möchte ich ihn herausholen und mit ihnen teilen. Darüber hinaus möchte ich diese Bibliothek unabhängig voneinander veröffentlichen können, da sie für andere nützlich sein könnte. 

  • Was ist der beste Weg, um dies mit Visual Studio 2008 zu tun? 
  • Ist ein Projekt in mehreren Lösungen vorhanden? 
  • Habe ich eine separate Lösung für den separaten Code? 
  • Kann eine Lösung von einer anderen abhängen?
207
pupeno

Ein Projekt kann von mehreren Lösungen referenziert werden.

Fügen Sie Ihre Bibliothek oder Ihren Kerncode in ein Projekt ein und referenzieren Sie das Projekt in beiden Lösungen.

67
ilivewithian

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 auf den Abwärtspfeil neben der Schaltfläche Add:

Screengrab

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 einzigen Version.

235
Andomar

MitFile > Add > Existing Project...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.

30
Aseem Kishore

Sie can fügen ein Projekt in mehrere Lösungen ein. Ich glaube nicht, dass ein Projekt ein Konzept 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 einige Arbeit verrichten müssen, wenn Sie auf verschiedene Versionen verweisen möchten, je nachdem, ob Sie Release- oder Debug-Konfigurationen erstellen.

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 Skripts ausführen. Behandeln Sie Ihre allgemeine Bibliothek grundsätzlich so, als wäre es eine andere Abhängigkeit von Dritten wie NUnit usw.

24
Jon Skeet

Sie können inline mit der folgenden Technik Platzhalter machen (die Art und Weise, wie @ Andomars Lösung in der .csproj-Datei gespeichert wird).

<Compile Include="..\MySisterProject\**\*.cs">
  <Link>_Inlined\MySisterProject\%(RecursiveDir)%(Filename)%(Extension)</Link>
</Compile>

Einfügen:

    <Visible>false</Visible>

Wenn Sie die Dateien ausblenden und/oder verhindern möchten, dass das Platzhalterzeichen erweitert wird, wenn Sie ein Element aus einem Ordner mit dem Namen "virtuell vorhanden" hinzufügen oder entfernen, z. B. MySisterProject oben.

22
Ruben Bartelink

Sie würden einfach ein separates Klassenbibliothekprojekt erstellen, das den allgemeinen Code enthält. Es muss nicht Teil einer Lösung sein, die es verwendet. Verweisen Sie auf die Klassenbibliothek von jedem Projekt, das es benötigt.

Der einzige Trick besteht darin, dass Sie eine Dateireferenz verwenden müssen, um auf das Projekt zu verweisen, da es nicht Teil der Lösungen ist, die darauf verweisen. Dies bedeutet, dass die tatsächliche Ausgabe-Assembly an einem Ort platziert werden muss, auf den alle Personen zugreifen können, die ein Projekt erstellen, das auf sie verweist. Dies kann beispielsweise durch Platzieren der Assembly auf einer Freigabe erfolgen.

18
John Saunders

Extrahieren Sie den allgemeinen Code in ein Klassenbibliothekprojekt, und fügen Sie das Projekt der Klassenbibliothek Ihren Lösungen hinzu. Anschließend können Sie einen Verweis auf den allgemeinen Code aus anderen Projekten hinzufügen, indem Sie der Klassenbibliothek einen Projektverweis hinzufügen. Der Vorteil einer Projektreferenz im Gegensatz zu einer Binär-/Assemblyreferenz besteht darin, dass das allgemeine Klassenbibliothekprojekt auch auf dieser Konfiguration basiert, wenn Sie Ihre Build-Konfiguration in Debugging, Release, Custom usw. ändern.

8
Mehmet Aras

Sie können dasselbe Projekt in mehr als eine Lösung einbinden, aber es ist garantiert, dass Sie später Probleme bekommen werden (relative Pfade können ungültig werden, wenn Sie beispielsweise Verzeichnisse verschieben).

Nachdem ich jahrelang damit gekämpft hatte, hatte ich endlich eine praktikable Lösung gefunden, aber Sie müssen 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 das ausführlich.

7

Es empfiehlt sich, eine DLL-Klassenbibliothek zu erstellen, die alle gängigen Funktionen enthält. Jede Lösung kann unabhängig von anderen Lösungen unabhängig von dieser DLL referenzieren.

Tatsächlich sind unsere Quellen in meiner Arbeit organisiert (und ich glaube an viele andere Orte).

Übrigens kann Solution nicht explizit auf eine andere Lösung angewiesen sein.

5
user88637

Es ist ein sehr guter Fall, wenn Sie "vorhandene Dateilinks hinzufügen" verwenden, wenn Sie Code über Projekte hinweg wiederverwenden möchten. In diesem Fall müssen Sie verschiedene Versionen abhängiger Bibliotheken referenzieren und diese unterstützen. 

Das Erstellen mehrerer Assemblys mit Verweisen auf verschiedene externe Assemblys ist ansonsten nicht einfach, ohne dass Sie Ihren Code duplizieren oder Tricks mit Quellcodeverwaltung verwenden müssen. 

Ich bin der Meinung, dass es am einfachsten ist, ein Projekt für die Entwicklung und den Komponententest beizubehalten und anschließend "Build" -Projekte mit vorhandenen Dateilinks zu erstellen, wenn Sie die Assemblys erstellen müssen, die auf verschiedene Versionen dieser externen Assemblys verweisen.

4
Rick Sipin

Sie können einen internen NuGet Server hosten und die allgemeinen Bibliotheken freigeben, die intern und extern für andere Projekte freigegeben werden.

Weiter dazu lesen

4
Si Zi

Wenn Sie versuchen, Code zwischen zwei verschiedenen Projekttypen (z. B. Desktop-Projekt und mobiles Projekt) freizugeben, können Sie den freigegebenen solutions-Ordner besuchen. Ich muss das für mein aktuelles Projekt tun, da sowohl die mobilen als auch die Desktop-Projekte identische Klassen erfordern, die nur in einer Datei enthalten sind. Wenn Sie diese Route wählen, kann eines der Projekte, für das die Datei verknüpft ist, Änderungen daran vornehmen, und alle Projekte werden für diese Änderungen neu erstellt.

4
Stevoni

Zwei Hauptschritte sind dabei

1- Erstellen einer C++ - DLL

Im visuellen Studio 

New->Project->Class Library in c++ template. Name of project here is first_dll in 
visual studio 2010. Now declare your function as public in first_dll.h file and 
write the code in first_dll.cpp file as shown below.

Header-Dateicode

// first_dll.h

using namespace System;

namespace first_dll 
{

public ref class Class1
{
public:
    static double sum(int ,int );
    // TODO: Add your methods for this class here.
};
}

Cpp-Datei

//first_dll.cpp
#include "stdafx.h"

#include "first_dll.h"

namespace first_dll
{

    double Class1:: sum(int x,int y)
    {
        return x+y;
    }

 }

Überprüfen Sie dies 

**Project-> Properties -> Configuration/General -> Configuration Type** 

diese Option sollte Dynamic Library (.dll) sein und die Lösung/das Projekt jetzt erstellen.

first_dll.dll Datei wird im Debug Ordner erstellt

2- Verlinkung in C # -Projekt

Öffnen Sie das C # -Projekt

Rightclick on project name in solution Explorer -> Add -> References -> Browse to path 
where first_dll.dll is created and add the file.

Fügen Sie diese Zeile oben in C # -Projekt ein

Using first_dll; 

Jetzt kann auf die Funktion von dll mit der folgenden Anweisung in einer Funktion zugegriffen werden

double var = Class1.sum(4,5);

Ich habe DLL in C++ - Projekt in VS2010 erstellt und in VS2013 C # -Projekt verwendet. Es funktioniert gut.

2
Croko

Eine einfachere Methode zum Einfügen einer Klassendatei eines Projekts in ein anderes Projekt besteht darin, das Projekt in eine vorhandene Lösung einzufügen und dann die DLL - Referenz des neuen Projekts im vorhandenen Projekt hinzuzufügen. Schließlich können Sie die Methoden der hinzugefügten Klasse verwenden, indem Sie mit der Direktive am Anfang einer beliebigen Klasse dekalieren. 

2
Amarendra K

Wenn Sie den gesamten Code ab VisualStudio 2015 in einer Lösung aufbewahren, können Sie den Code freigeben, indem Sie Hinzufügen eines freigegebenen Projekts hinzufügen ..__ Fügen Sie dann für jedes Projekt, in dem Sie den Code verwenden möchten, einen Verweis auf dieses freigegebene Projekt hinzu sowie die richtigen Anwendungsrichtlinien.

1
wecky

Jetzt können Sie das Shared Project verwenden. 

Ein freigegebenes Projekt ist eine großartige Möglichkeit, gemeinsamen Code über mehrere Anwendung Wir haben bereits Erfahrung mit dem Shared Project-Typ in Visual Studio 2013 als Teil von Windows 8.1 Universal App Entwicklung, aber mit Visual Studio 2015 handelt es sich um ein eigenständiges neues Projektvorlage; und wir können es mit anderen App-Typen wie .__ verwenden. Konsole, Desktop, Telefon, Store-App usw. Diese Art von Projekt ist extrem hilfreich, wenn wir einen gemeinsamen Code und auch die Logik gemeinsam nutzen wollen als Komponenten für mehrere Anwendungen mit einer einzigen Plattform . Dies ermöglicht auch den Zugriff auf die plattformspezifischen APIs, Assets usw.

 enter image description here

für mehr Info check this

0
Hussein Khalil