如何在Visual Studio中的项目/解决方案之间共享代码?

时间:2009-07-12 17:24:38

标签: .net visual-studio code-sharing

我有两个解决方案,它们有一些共同的代码,因此我想将它解压缩并在它们之间共享。此外,我希望能够独立发布该库,因为它可能对其他人有用。

  • 使用Visual Studio 2008执行此操作的最佳方法是什么?
  • 项目是否存在于多个解决方案中?
  • 我是否为单独的代码提供了单独的解决方案?
  • 解决方案可以依赖另一个吗?

16 个答案:

答案 0 :(得分:240)

您可以在两个项目之间“链接”代码文件。右键单击您的项目,选择Add - > Existing item,然后点击Add按钮旁边的向下箭头:

Screengrab

根据我的经验,链接比创建库更简单。链接代码会生成单个版本的单个可执行文件。

答案 1 :(得分:67)

多个解决方案可以引用项目。

将您的库或核心代码放入一个项目中,然后在两个解决方案中引用该项目。

答案 2 :(得分:31)

File > Add > Existing Project... 可让您将项目添加到当前解决方案中。只是添加这个,因为以上帖子都没有指出这一点。这使您可以在多个解决方案中包含相同的项目。

答案 3 :(得分:24)

可以在多个解决方案中包含项目。我不认为一个项目有一个概念,它是哪个解决方案的一部分。但是,另一种方法是将第一个解决方案构建到一些众所周知的地方,并引用已编译的二进制文件。这样做的缺点是,如果要根据是在构建版本还是在调试配置中引用不同的版本,则需要做一些工作。

我不相信您可以让一个解决方案实际上依赖于另一个解决方案,但您可以通过自定义脚本以适当的顺序执行自动构建。基本上将您的公共库视为另一个第三方依赖,如NUnit等。

答案 4 :(得分:22)

您可以使用以下技术进行外卡内联(这是@ Andomar的解决方案保存在.csproj中的方式)

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

投入:

    <Visible>false</Visible>

如果您想要隐藏文件和/或阻止扩展外卡,如果您在“虚拟现有项目”文件夹中添加或删除项目,例如上面的MySisterProject

答案 5 :(得分:18)

您只需创建一个单独的类库项目来包含公共代码。它不必是使用它的任何解决方案的一部分。从任何需要它的项目中引用类库。

唯一的技巧是你需要使用文件引用来引用项目,因为它不会是引用它的解决方案的一部分。这意味着必须将实际输出程序集放置在可构建引用它的项目的任何人都可以访问的位置。例如,可以通过将程序集放在共享上来完成此操作。

答案 6 :(得分:8)

将公共代码解压缩到类库项目中,并将该类库项目添加到您的解决方案中。然后,您可以通过向该类库添加项目引用来添加对其他项目的公共代码的引用。具有项目引用而不是二进制/程序集引用的优点是,如果将构建配置更改为调试,发布,自定义等,则还将基于该配置构建公共类库项目。

答案 7 :(得分:7)

您可以在多个解决方案中包含相同的项目,但是您可以保证在未来的某个时间遇到问题(例如,当您移动目录时,相对路径可能会变得无效)

经过多年的努力,我终于想出了一个可行的解决方案,但它要求你使用Subversion进行源代码控制(这不是一件坏事)

在解决方案的目录级别,添加一个 svn:externals 属性,指向要包含在解决方案中的项目。 Subversion将从存储库中提取项目并将其存储在解决方案文件的子文件夹中。您的解决方案文件可以简单地使用相对路径来引用您的项目。

如果我找到更多时间,我会详细解释。

答案 8 :(得分:5)

创建包含所有常用功能的dll类库是个好主意。无论其他解决方案如何,每个解决方案都可以独立地引用此dll。

事实上,这就是我们工作中的资源组织方式(我相信很多其他地方)。

顺便说一句,解决方案无法明确依赖其他解决方案。

答案 9 :(得分:5)

您可以托管internal NuGet Server并共享将在内部和外部在其他项目中共享的公共库。

此外read

答案 10 :(得分:4)

如果您尝试在两种不同的项目类型之间共享代码(即:桌面项目和移动项目),您可以查看共享的solutions folder。我必须为我当前的项目做到这一点,因为移动和桌面项目都需要只有1个文件的相同类。如果你走这条路线,任何链接了文件的项目都可以对其进行更改,所有项目都将根据这些更改进行重建。

答案 11 :(得分:4)

在跨项目重用代码时使用“添加现有文件链接”是非常好的情况,那时您需要引用和支持不同版本的依赖库。

如果没有复制代码或利用源代码控制技巧,使多个程序集引用不同的外部程序集并不容易。

我认为最简单的方法是维护一个项目进行开发和单元测试,然后在需要创建引用这些外部程序集的不同版本的程序集时使用现有文件链接创建“构建”项目。

答案 12 :(得分:3)

涉及的两个主要步骤是

1-创建C ++ 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-在C#项目中链接

打开C#项目

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

在C#项目的顶部添加此行

Using first_dll; 

现在可以使用某些函数中的下面的语句来访问来自dll的函数

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

我在VS2010中的c ++项目中创建了dll并在VS2013 C#项目中使用它。它运行良好。

答案 13 :(得分:2)

在另一个项目中包含一个项目的类文件的一种更简单的方法是在现有解决方案中添加项目,然后在现有项目中添加新项目的DLL引用。最后,您可以通过在任何类的顶部使用指令decalring来使用添加的类的方法。

答案 14 :(得分:2)

从VisualStudio 2015开始,如果您将所有代码保存在一个解决方案中,则可以按adding a shared project共享代码。 然后为要使用代码的每个项目添加对此共享项目的引用,以及正确的using指令。

答案 15 :(得分:1)

现在您可以使用共享项目

  

共享项目是跨多个共享通用代码的好方法   应用程序我们已经经历过共享项目类型   在Visual Studio 2013中作为Windows 8.1 Universal App的一部分   开发,但使用Visual Studio 2015,这是一个独立的新功能   项目模板;我们可以将其与其他类型的应用一起使用   控制台,桌面,电话,商店应用程序等。此类项目是   当我们想要共享通用代码和逻辑时,这非常有帮助   作为一个平台中跨多个应用程序的组件。   这也允许访问特定于平台的API,资产等。

enter image description here

有关更多信息,请检查this