我有两个具有一些通用代码的解决方案,因此我想将其提取出来并在它们之间共享。此外,我希望能够独立发布该库,因为它可能对其他人有用。
- 使用Visual Studio 2008的最佳方法是什么?
- 一个项目中是否存在多个解决方案?
- 对于单独的代码,我是否有单独的解决方案?
- 解决方案可以依赖另一个吗?
我有两个具有一些通用代码的解决方案,因此我想将其提取出来并在它们之间共享。此外,我希望能够独立发布该库,因为它可能对其他人有用。
Answers:
一个项目可以被多个解决方案引用。
将您的库或核心代码放入一个项目,然后在两个解决方案中都引用该项目。
您可以在两个项目之间“链接”代码文件。右键单击您的项目,选择Add
-> Existing item
,然后单击Add
按钮旁边的向下箭头:
以我的经验,链接比创建库更简单。链接的代码将生成具有单个版本的单个可执行文件。
File > Add > Existing Project...
将允许您将项目添加到当前解决方案中。只是添加此内容是因为上述帖子均未指出这一点。这使您可以将同一项目包含在多个解决方案中。
您可以在多个解决方案中包含一个项目。我认为项目没有概念涉及哪个解决方案。但是,另一种选择是使第一个解决方案构建到某个知名的地方,并引用已编译的二进制文件。这样做的缺点是,如果要基于发布配置还是调试配置来引用不同的版本,则需要做一些工作。
我不相信您可以使一个解决方案实际上依赖于另一个解决方案,但是您可以通过自定义脚本以适当的顺序执行自动构建。基本上将您的公共库当作另一个第三方依赖项(如NUnit等)对待。
您可以使用以下技术对内联进行通配符内联(这是@Andomar解决方案在.csproj中保存的方式)
<Compile Include="..\MySisterProject\**\*.cs">
<Link>_Inlined\MySisterProject\%(RecursiveDir)%(Filename)%(Extension)</Link>
</Compile>
投放:
<Visible>false</Visible>
如果要隐藏文件和/或防止通配符被扩展,则可以在上述“虚拟现有项”文件夹中添加或删除项MySisterProject
。
<Import
缓存到.csproj文件中的.targets文件等将被缓存,直到您按要求重新加载解决方案为止。
您只需创建一个单独的类库项目来包含通用代码。它不一定是使用它的任何解决方案的一部分。从任何需要它的项目中引用类库。
唯一的窍门是,您将需要使用文件引用来引用项目,因为它不会成为引用该项目的解决方案的一部分。这意味着实际的输出程序集将必须放置在任何构建引用该程序集的项目的人都可以访问的位置。例如,这可以通过将程序集放在共享上来完成。
您可以在多个解决方案中包含同一个项目,但可以保证一定会遇到问题(例如,在移动目录时,相对路径可能无效)。
经过多年的努力,我终于想出了一个可行的解决方案,但是它要求您使用Subversion进行源代码控制(这不是一件坏事)
在解决方案的目录级别,添加一个svn:externals属性,该属性指向您要包含在解决方案中的项目。Subversion将从存储库中提取项目,并将其存储在解决方案文件的子文件夹中。您的解决方案文件可以仅使用相对路径来引用您的项目。
如果有更多时间,我将详细解释。
svn:externals
指向存储库的硬链接。当您移动存储库时,外部链接仍指向旧的存储库。
将通用代码提取到类库项目中,然后将该类库项目添加到您的解决方案中。然后,可以通过将项目引用添加到该类库来添加对其他项目中通用代码的引用。与二进制/程序集引用相比,具有项目引用的优势在于,如果将构建配置更改为调试,发布,自定义等,则通用类库项目也将基于该配置来构建。
涉及的两个主要步骤是
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#项目中使用了它。
您可以托管内部NuGet服务器,并共享将在内部和外部在其他项目中共享的公用库。
进一步阅读
如果您试图在两种不同的项目类型(即,桌面项目和移动项目)之间共享代码,则可以查看shared solutions文件夹。我必须对当前项目执行此操作,因为移动项目和桌面项目都需要只有1个文件的相同类。如果您采用这种方法,则任何链接了文件的项目都可以对其进行更改,并且将根据这些更改来重建所有项目。
在另一个项目中包含一个项目的类文件的一种更简单的方法是,在现有解决方案中添加项目,然后在现有项目中添加新项目的DLL引用。最后,您可以通过在任何类顶部使用using指令对命令进行除法来使用添加的类的方法。