我有两个具有一些通用代码的解决方案,因此我想将其提取出来并在它们之间共享。此外,我希望能够独立发布该库,因为它可能对其他人有用。
- 使用 Visual Studio 2008 的最佳方法是什么?
- 一个项目是否存在于多个解决方案中?
- 我对单独的代码有单独的解决方案吗?
- 一个解决方案可以依赖另一个解决方案吗?
我有两个具有一些通用代码的解决方案,因此我想将其提取出来并在它们之间共享。此外,我希望能够独立发布该库,因为它可能对其他人有用。
您可以在两个项目之间“链接”代码文件。右键单击您的项目,选择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
上面的“虚拟现有项目”文件夹中添加或删除项目。
您只需创建一个单独的类库项目来包含公共代码。它不需要是使用它的任何解决方案的一部分。从任何需要它的项目中引用类库。
唯一的技巧是您需要使用文件引用来引用项目,因为它不会成为引用它的解决方案的一部分。这意味着实际的输出程序集必须放置在任何构建引用它的项目的人都可以访问的位置。例如,这可以通过将程序集放在共享上来完成。
将通用代码提取到类库项目中,并将该类库项目添加到您的解决方案中。然后,您可以通过添加对该类库的项目引用来添加对其他项目的公共代码的引用。与二进制/程序集引用相比,拥有项目引用的优势在于,如果您将构建配置更改为调试、发布、自定义等,公共类库项目也将基于该配置构建。
您可以在多个解决方案中包含同一个项目,但您肯定会在以后的某个时候遇到问题(例如,当您移动目录时,相对路径可能会变得无效)
经过多年的努力,我终于想出了一个可行的解决方案,但这需要您使用 Subversion 进行源代码控制(这不是一件坏事)
在解决方案的目录级别,添加一个svn:externals属性,指向要包含在解决方案中的项目。Subversion 将从存储库中提取项目并将其存储在解决方案文件的子文件夹中。您的解决方案文件可以简单地使用相对路径来引用您的项目。
如果我有更多时间,我会详细解释这一点。
最好创建一个包含所有常用功能的 dll 类库。无论其他解决方案如何,每个解决方案都可以独立引用此 dll。
事实上,这就是我们的资源在我的工作中的组织方式(我相信在许多其他地方)。
顺便说一句,解决方案不能显式依赖另一个解决方案。
如果您尝试在两种不同的项目类型(即:桌面项目和移动项目)之间共享代码,您可以查看共享解决方案文件夹。我必须为我当前的项目这样做,因为移动和桌面项目都需要仅在 1 个文件中的相同类。如果你走这条路,任何链接文件的项目都可以对其进行更改,并且所有项目都将根据这些更改重新构建。
涉及的两个主要步骤是
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.
};
}
cp文件
//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)并立即构建解决方案/项目。
在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 服务器并共享将在内部和外部其他项目中共享的公共库。
进一步阅读
在跨项目重用代码时,有一个非常好的案例可以使用“添加现有文件链接”,也就是当您需要引用和支持不同版本的依赖库时。
在不复制代码或利用源代码控制技巧的情况下,通过引用不同的外部程序集来制作多个程序集并不容易。
我相信维护一个用于开发和单元测试的项目是最简单的,然后当您需要创建引用这些外部程序集的不同版本的程序集时,使用现有文件链接创建“构建”项目。
从 VisualStudio 2015 开始,如果您将所有代码保存在一个解决方案中,则可以通过添加共享项目来共享代码。然后为要在其中使用代码的每个项目以及正确的 using 指令添加对此共享项目的引用。
现在您可以使用共享项目
共享项目是跨多个应用程序共享通用代码的好方法我们已经体验过 Visual Studio 2013 中的共享项目类型作为 Windows 8.1 通用应用程序开发的一部分,但在 Visual Studio 2015 中,它是一个独立的新项目模板;我们可以将它与其他类型的应用程序一起使用,如控制台、桌面、电话、商店应用程序等。当我们想要在单个平台上跨多个应用程序共享通用代码、逻辑和组件时,这种类型的项目非常有用. 这也允许访问特定于平台的 API、资产等。
有关更多信息,请检查此
将一个项目的类文件包含在另一个项目中的一种更简单的方法是在现有解决方案中添加项目,然后在现有项目中添加新项目的 DLL 引用。最后,您可以通过在任何类的顶部贴上 using 指令来使用添加的类的方法。