Как вы совместно используете код между проектами/решениями в Visual Studio?

У меня есть два решения, которые имеют некоторый общий код, поэтому я хотел бы извлечь его и поделиться им между ними. Кроме того, я хотел бы иметь возможность выпускать эту библиотеку самостоятельно, потому что она может быть полезной для других.

  • Какой лучший способ сделать это с помощью Visual Studio 2008?
  • Является ли проект более чем одним решением?
  • Есть ли у меня отдельное решение для отдельной части кода?
  • Может ли решение зависеть от другого?

Ответ 1

На проект можно ссылаться несколько решений.

Поместите свою библиотеку или основной код в один проект, затем укажите этот проект в обоих решениях.

Ответ 2

Вы можете "связать" файл кода между двумя проектами. Щелкните правой кнопкой мыши свой проект, выберите AddExisting item, а затем нажмите стрелку вниз рядом с кнопкой Add:

Screengrab

В моем опыте ссылка проще, чем создание библиотеки. Связанный код приводит к одному исполняемому файлу с одной версией.

Ответ 3

File > Add > Existing Project... позволит вам добавлять проекты в текущее решение. Просто добавьте это, поскольку ни один из вышеперечисленных сообщений не указывает на это. Это позволяет включить один и тот же проект в несколько решений.

Ответ 4

Вы можете включить проект в более чем одно решение. Я не думаю, что у проекта есть понятие о том, в каком решении оно входит. Однако другой альтернативой является создание первого решения в известном месте и ссылка на скомпилированные двоичные файлы. Это имеет тот недостаток, что вам нужно будет немного поработать, если вы хотите ссылаться на разные версии на основе того, строите ли вы конфигурацию выпуска или отладки.

Я не верю, что вы можете сделать одно решение на самом деле зависимым от другого, но вы можете выполнять автоматические сборки в соответствующем порядке с помощью настраиваемых сценариев. В основном рассматривайте свою общую библиотеку так, как если бы она была другой зависимой от третьей стороны, такой как NUnit и т.д.

Ответ 5

Вы можете использовать встроенную флеш-карту, используя следующую технику (это способ, которым решение @Andomar сохраняется в .csproj)

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

Вставьте:

    <Visible>false</Visible>

Если вы хотите скрыть файлы и/или предотвратить распространение wild-card, если вы добавили или удалили элемент из папки "виртуальный существующий элемент", например MySisterProject.

Ответ 6

Вы просто создадите отдельный проект библиотеки классов, чтобы содержать общий код. Он не должен быть частью любого решения, которое его использует. Ссылка на библиотеку классов из любого проекта, который в ней нуждается.

Единственный трюк - это то, что вам нужно будет использовать ссылку на файл для ссылки на проект, так как он не будет частью решений, которые ссылаются на него. Это означает, что фактическая сборка должна быть размещена в месте, к которому может обратиться любой, кто строит проект, который ссылается на него. Это можно сделать, разместив сборку на общем ресурсе, например.

Ответ 7

Извлеките общий код в проект библиотеки классов и добавьте этот проект библиотеки классов в свои решения. Затем вы можете добавить ссылку на общий код из других проектов, добавив ссылку на проект в эту библиотеку классов. Преимущество наличия ссылки на проект в отличие от ссылки на двоичную/сборку заключается в том, что если вы измените конфигурацию сборки для отладки, выпуска, пользовательского и т.д., Общий проект библиотеки классов будет построен на основе этой конфигурации.

Ответ 8

Вы можете включить один и тот же проект в более чем одно решение, но вы гарантированно столкнетесь с проблемами когда-нибудь в будущем (относительные пути могут стать недействительными, например, при перемещении каталогов)

После долгих лет борьбы с этим я наконец придумал работоспособное решение, но для этого вам необходимо использовать Subversion для управления версиями (что не так уж плохо)

На уровне каталога вашего решения добавьте свойство svn: externals, указывающее на проекты, которые вы хотите включить в свое решение. Subversion вытащит проект из репозитория и сохранит его в подпапке вашего файла решения. Ваш файл решения может просто использовать относительные пути для ссылки на ваш проект.

Если я найду еще немного времени, я подробно объясню это.

Ответ 9

Это хорошая идея создать библиотеку классов dll, которая содержит все общие функции. Каждое решение может ссылаться на эту dll независимо от других решений.

Infact, это то, как наши источники организованы в моей работе (и я верю во многих других местах).

Кстати, решение не может явно зависеть от другого решения.

Ответ 10

Если вы пытаетесь обмениваться кодами между двумя разными типами проектов (например, рабочий проект и мобильный проект), вы можете посмотреть общие решения папка. Я должен сделать это для моего текущего проекта, поскольку мобильные и настольные проекты требуют одинаковых классов, которые находятся только в 1 файле. Если вы пройдете этот маршрут, любой из проектов, имеющих связанный с ним файл, может внести в него изменения, и все проекты будут перестроены против этих изменений.

Ответ 11

Существует очень хороший пример использования "добавления существующих ссылок на файлы" при повторном использовании кода для проектов, и именно тогда вам нужно ссылаться и поддерживать разные версии зависимых библиотек.

Создание нескольких сборок со ссылками на различные внешние сборки нелегко сделать иначе, не дублируя ваш код, или используя трюки с контролем исходного кода.

Я считаю, что проще всего поддерживать один проект для разработки и unit test, а затем создавать проекты "build" с использованием существующих ссылок на файлы, когда вам нужно создавать сборки, которые ссылаются на разные версии этих внешних сборок.

Ответ 12

Вы можете разместить внутренний сервер NuGet и поделиться общими библиотеками, которые будут совместно использоваться в других проектах изнутри и снаружи.

Далее читать

Ответ 13

Один простой способ включить файл класса одного проекта в другие проекты - это добавить проект в существующее решение, а затем добавить ссылку на DLL нового проекта в существующий проект. Наконец, вы можете использовать методы добавленного класса с помощью decalring с помощью директивы в верхней части любого класса.

Ответ 14

Два основных этапа:

1- Создание dll С++

В визуальной студии

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.

Код заголовка файла

// 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

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

#include "first_dll.h"

namespace first_dll
{

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

 }

Проверить это

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

этот параметр должен быть Динамической библиотекой (.dll) и теперь создавать проект/проект.

файл first_dll.dll создан в папке Отладка

2- Связывание его в проекте С#

Открыть проект С#

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

Добавьте эту строку вверху в проект С#

Using first_dll; 

Теперь функцию из dll можно получить с помощью инструкции ниже в некоторой функции

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

Я создал dll в проекте С++ в VS2010 и использовал его в VS2013 С# project.It хорошо работает.

Ответ 15

Начиная с VisualStudio 2015, если вы храните весь свой код в одном решении, вы можете поделиться кодом, добавив общий проект. Затем добавьте ссылку на этот общий проект для каждого проекта, в котором вы хотите использовать код, а также соответствующие директивы using.

Ответ 16

Теперь вы можете использовать общий проект

Общий проект - отличный способ совместного использования общего кода между несколькими приложениями. Мы уже сталкивались с типом общего проекта в Visual Studio 2013 как часть разработки универсального приложения для Windows 8.1, но в Visual Studio 2015 это автономный новый шаблон проекта; и мы можем использовать его с другими типами приложений, такими как Console, Desktop, Phone, Store Store и т.д. Этот тип проекта чрезвычайно полезен, когда мы хотим совместно использовать общий код, логику, а также компоненты для нескольких приложений на одной платформе., Это также позволяет получить доступ к специфичным для платформы API, ресурсам и т.д.

enter image description here

для получения дополнительной информации проверьте это