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

我有两个解决scheme,有一些共同的代码,所以我想提取出来,并在他们之间分享。 此外,我希望能够独立发布该图书馆,因为这可能对其他人有用。

  • 用Visual Studio 2008做什么最好的方法是什么?
  • 一个项目是否存在多个解决scheme?
  • 我是否有独立的代码解决scheme?
  • 一个解决scheme可以依赖于另一个吗?

一个项目可以被多个解决scheme引用。

把你的图书馆或核心代码放到一个项目中,然后在两个解决scheme中引用该项目。

您可以在两个项目之间“链接”一个代码文件。 右键单击您的项目,selectAdd – > Existing item ,然后单击Addbutton旁边的向下箭头:

Screengrab

以我的经验,链接比创build一个库更简单。 链接的代码导致单个版本的可执行文件。

File > Add > Existing Project...可让您将项目添加到当前的解决scheme。 只是增加这个,因为没有上述的post指出。 这使您可以在多个解决scheme中包含相同的项目。

可以在多个解决scheme中包含项目。 我不认为一个项目有一个解决scheme的概念。 然而,另一种select是将第一个解决scheme构build到一些知名的地方,并参考编译后的二进制文件。 这有一个缺点,如果你想参考不同的版本,你需要做一些工作。

我不相信你可以让一个解决scheme实际上依赖于另一个解决scheme,但是你可以通过自定义脚本以适当的顺序执行你的自动化构build。 基本上对待你的共同的图书馆,就好像它是另一个像NUnit等第三方依赖项。

您可以使用以下技术以内联(wild-card)内嵌(这是@ Andomar解决scheme保存在.csproj中的方式)

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

投放:

  <Visible>false</Visible> 

如果您希望隐藏文件和/或防止通配符包括被扩展,如果您添加或删除一个项目从“虚拟现有项目”文件夹,如上面的MySisterProject

您只需创build一个单独的类库项目来包含通用代码。 它不一定是使用它的任何解决scheme的一部分。 从任何需要它的项目引用类库。

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

将通用代码提取到类库项目中,并将该类库项目添加到您的解决scheme中。 然后,您可以通过向该类库添加项目引用来添加对其他项目的公共代码的引用。 具有项目引用而不是二进制/汇编引用的优点是,如果将构buildconfiguration更改为debugging,发布,自定义等,那么也将基于该configuration构build公共类库项目。

您可以在多个解决scheme中包含相同的项目,但是您可以保证在某个时候出现问题(例如,当您移动目录时相对path会变得无效)

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

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

如果我find更多的时间,我会详细解释一下。

创build一个包含所有常见function的dll类库是一个好主意。 无论其他解决scheme如何,每个解决scheme都可以独立引用此dll。

事实上,这就是我们的来源是如何组织在我的工作(我相信在许多其他地方)。

顺便说一句,解决scheme不能明确依赖于另一个解决scheme。

如果您试图在两个不同的项目types(即桌面项目和移动项目)之间共享代码,则可以查看共享解决scheme文件夹 。 我必须为我目前的项目做到这一点,因为移动和桌面项目都需要相同的类,只有一个文件。 如果你走这条路线,任何具有链接文件的项目都可以对其进行更改,所有项目都将根据这些更改进行重build。

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

使用不同外部程序集的引用来制作多个程序集并不容易,除非重复代码,或者利用源代码控制技巧。

我相信维护一个项目用于开发和unit testing是最容易的,然后在需要创build引用这些外部程序集的不同版本的程序集时,使用现有的文件链接创build“构build”项目。

将一个项目的类文件包含到另一个项目中的一种更简单的方法是:在现有解决scheme中添加项目,然后在现有项目中添加新项目的DLL参考。 最后,你可以通过在任何类的顶部使用伪指令来使用添加的类的方法。

涉及的两个主要步骤是

1-创build一个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库(.dll)并且现在构build解决scheme/项目。

Debug文件夹中创buildfirst_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 ++项目中创build了dll,并在VS2013的C#项目中使用了它,效果很好。

您可以托pipe一个内部的NuGet服务器,并共享将在其他项目内部和外部共享的公共库。

进一步在这读