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

用Visual Studio 2008最好的方法是什么? 一个项目是否存在于多个解决方案中? 对于这段单独的代码,我有单独的解决方案吗? 一个解决方案能依赖于另一个解决方案吗?


当前回答

将一个项目包含在多个解决方案中是一个非常糟糕的主意。

假设您在SolutionA和SolutionB中都包含了一个共享类库项目。

现在,如果您在解决方案a中工作,并在共享中进行了突破性更改,会发生什么?然后您将在解决方案a中得到一个构建错误,这可能很容易修复。但是你不会注意到你在solutionb中也弄坏了一些东西。您的构建服务器可能会告诉您—但这已经太迟了。在发布代码之前,您需要知道这些。

只有两个好的解决方案:

让Shared成为一个可以实际共享的nuget包,并使用semver来控制破坏性更改的影响。这可能会产生一些您不想要的开销。 创建一个单独的解决方案,其中包含来自solutiona和SolutionB的Shared和所有依赖的项目。如果您有许多不相关的项目依赖于sharedd,那么这可能不是最好的解决方案,然后您应该使用nuget方法。

其他回答

将公共代码提取到类库项目中,并将该类库项目添加到解决方案中。然后,您可以通过向该类库添加项目引用来添加对来自其他项目的公共代码的引用。与二进制/程序集引用相比,拥有项目引用的优势在于,如果您将构建配置更改为调试、发布、自定义等,公共类库项目也将基于该配置构建。

现在您可以使用共享项目了

Shared Project is a great way of sharing common code across multiple application We already have experienced with the Shared Project type in Visual Studio 2013 as part of Windows 8.1 Universal App Development, But with Visual Studio 2015, it is a Standalone New Project Template; and we can use it with other types of app like Console, Desktop, Phone, Store App etc.. This types of project is extremely helpful when we want to share a common code, logic as well as components across multiple applications with in single platform. This also allows accessing the platform-specific API ’s, assets etc.

更多信息请看这个

涉及的两个主要步骤是

1-创建c++ dll

在visual 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.

文件代码

// 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),现在就构建解决方案/项目。

在Debug文件夹中创建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#项目中使用。它工作得很好。

如果您试图在两个不同的项目类型(即:桌面项目和移动项目)之间共享代码,您可以查看共享解决方案文件夹。我必须为我当前的项目这样做,因为移动和桌面项目都需要相同的类,只在一个文件中。如果您采用这种方法,任何链接了该文件的项目都可以对其进行更改,并且所有项目都将根据这些更改重新构建。

您可以在多个解决方案中包含相同的项目,但是您一定会在某个时候遇到问题(例如,当您移动目录时,相对路径可能会失效)。

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

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

如果我有更多的时间,我会详细解释这一点。