首页 文章

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

提问于
浏览
205

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

  • 使用Visual Studio 2008执行此操作的最佳方法是什么?

  • 项目是否存在于多个解决方案中?

  • 我是否为单独的代码提供了单独的解决方案?

  • 解决方案可以依赖另一个吗?

16 回答

  • 7

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

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

  • 22

    您可以"link"两个项目之间的代码文件 . 右键单击您的项目,选择 Add - > Existing item ,然后单击 Add 按钮旁边的向下箭头:

    Screengrab

    根据我的经验,链接比创建库更简单 . 链接代码导致单个可执行文件具有单个版本 .

  • 4

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

  • 29

    您可以在多个解决方案中包含项目 . 我不是't think a project has a concept of which solution it'的一部分 . 但是,另一种方法是将第一个解决方案构建到一些众所周知的地方,并引用已编译的二进制文件 . 这样做的缺点是您需要在发布或调试配置中进行构建 .

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

  • 4

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

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

    投入:

    <Visible>false</Visible>
    

    如果要在'virtual existing item'文件夹中添加或删除项目(如上面的 MySisterProject ),则要隐藏文件和/或阻止外卡包含展开 .

  • 24

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

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

  • 2

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

  • 235

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

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

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

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

  • 0

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

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

    顺便说一句,解决方案不能明确依赖于另一种解决方案 .

  • 2

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

  • 67

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

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

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

  • 4

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

    进一步这个read

  • 18

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

  • 5

    涉及的两个主要步骤是

    1- Creating a 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**
    

    此选项应为 Dynamic Library(.dll) 并立即构建解决方案/项目 .

    first_dll.dll 文件在 Debug folder 中创建

    2- Linking it in C# project

    打开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#项目中使用它 . 它运行良好 .

  • 8

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

  • 0

    现在你可以使用 Shared Project

    共享项目是跨多个应用程序共享公共代码的好方法我们已经在Visual Studio 2013中使用共享项目类型作为Windows 8.1通用应用程序开发的一部分,但使用Visual Studio 2015,它是一个独立的新项目模板;我们可以将它与其他类型的应用程序一起使用,如Console,Desktop,Phone,Store App等 . 当我们想要在单一平台上共享多个应用程序中的公共代码,逻辑和组件时,这类项目非常有用 . . 这也允许访问特定于平台的API,资产等 .

    enter image description here

    了解更多信息,请查看this

相关问题