Visual Studio:添加项目/添加链接而不仅仅是添加

24

我刚开始使用Visual Studio,之前用的是Delphi。

现在,我有一个目录树,里面有很多.cs文件(根目录为\Common)。我还有一个应用程序目录树(根目录为\Applications),最后,我有一个装配件目录树(根目录为\Assemblies)。

我想把我的.cs文件放在Common目录中,并将所有环境设置(解决方案、项目、设置、元数据、调试数据、bin等)都放在Assemblies目录中。所以,举个简单的例子,我有一个名叫PdMagic.Common.Math.dll的装配件。解决方案和项目位于\Assemblies\Common\Math。它的所有源代码(.cs)文件都在\Common\Math中。(matrix.cs、trig.cs、mathtypes.cs、mathfuncs.cs、stats.cs等)

当我使用“添加现有项”将matrix.cs添加到我的项目中时,它会被复制到\Assemblies\Common\Math文件夹中。我只想引用它,不想让多个副本堆积在电脑中。我尝试了添加现有项,并使用下拉菜单选择“添加链接”,而不仅仅是“添加”,这似乎正是我想要的。

问题:在这种情况下,什么是最佳实践?大多数人是否只是将这些.cs文件放在项目的同一个文件夹中?为什么不把“添加链接”设为默认值?

谢谢!


回答你的另一个问题,Prism团队已经做了很多工作来使这个工作。请查看这篇文章:http://msdn.microsoft.com/en-us/magazine/ee321573.aspx - NerdFury
Prism的“项目链接器”非常完美。正是我所想要的。现在我必须弄清楚是否可以使用它。谢谢。 - Pete d'Oronzio
8个回答

93
您可以通过点击添加按钮右侧的小箭头,使用添加-->现有项目命令中的添加为链接选项…

(感谢Peter)

虽然我意识到这不是对原问题(关于最佳实践)的答案,但我提供此答案是为了节省其他被误导进入此问题的人的时间。


2
目前最佳答案,这里是您的+10声望! - Peter Majeed
5
虽然不是对上面问题的最佳回答,但却是我所寻找的答案! - Amir Abiri
我从Visual Studio还没有版本号的时候就开始使用了,但我从来没有注意到这个功能!谢谢!(顺便说一句@GrantWinney,我确认了你的理论;这个问题在“如何将文件添加为链接”的搜索排名很高,这就是我来到这里的原因。) - Paul Smith
非常感谢!一直在寻找这个解决方案,它有效并且是确切的答案!! - aru

12

在这种情况下,“最佳实践”是不要与工具作对。它允许您做您想要的事情,但如果您只是让IDE为您组织项目,您将能够完成更多工作并专注于代码。

我会创建一个名为PdMagic.Common的空解决方案项目。

这将为您提供一个文件结构如下:

PdMagic.Common\
PdMagic.Common\PdMagic.Common.sln

通常我会通过文件系统添加一个src和libs文件夹,而不是使用VS。

在libs文件夹中,我会放置所有第三方依赖项,而src文件夹将保存所有我的项目。

PdMagic.Common\
PdMagic.Common\PdMagic.Common.sln
PdMagic.Common\libs
PdMagic.Common\libs\nunit
PdMagic.Common\src

接下来,在Visual Studio中,我会右键单击刚创建的解决方案,并点击“添加 -> 新项目”,然后我会指定它创建在\src文件夹中,并将其命名为PdMagic.Common.Math。

现在我的文件夹结构看起来是这样的:

PdMagic.Common\
PdMagic.Common\PdMagic.Common.sln
PdMagic.Common\libs
PdMagic.Common\libs\nunit
PdMagic.Common\src
PdMagic.Common\src\PdMagic.Common.Math
PdMagic.Common\src\PdMagic.Common.Math\PdMagic.Common.Math.csproj
PdMagic.Common\src\PdMagic.Common.Math\Class1.cs

因此,当您向PdMagic.Common.Math项目添加类时,它们将与项目文件位于同一文件夹中。这是IDE认为我们应该遵循的方式,我认为大多数开发人员都会遵循这种方式,因为尝试在文件系统上获得任何其他布局都需要与IDE进行大量的斗争。我知道从不同的约定中转换可能很困难,并且您本能地希望在新环境中使用相同的约定。但是,如果您坚持使用惯例(无论您是否认为它们是正确的),您将完成更多工作,因为您不会试图强制IDE按照您认为应该完成的方式进行操作。


这正是我在寻找的答案。 在你写下它的时候,我正在进行一些实验,发现了一个(常见)情况,我不确定它是否能处理。 我的目标是针对Silverlight和WPF。 大多数源代码(.cs)相同,但必须为每个构建不同的程序集。 因此,我需要在SL和WPF中分别使用PdMagic.Common.Math。我认为这需要两个项目都使用相同的Class1.cs。 能否再麻烦您再帮我进一步解决一下呢? 再次感谢您的回答。 - Pete d'Oronzio

1

我认为“最佳实践”是将那些“常见”的例程放入一个程序集中,您可以引用该程序集,而不是将源文件拉入许多不同的项目中。您可以将其作为预构建的程序集添加到“添加引用...”中,或者通过包含该程序集的项目并向项目添加引用来添加它(也可以在“添加引用...”对话框中完成)。

这是其中一件事情,起初似乎需要一些工作(可能确实如此),但长期来看通常会得到回报。


@MichaelBurr:你比我快!我猜是因为你的键盘更快。 - Cyberherbalist
我认为他想以与VS不同的方式组织他的项目和文件,因此他正在与IDE斗争,使事情按照他想要的方式进行,而不是MS说他应该想要的方式。我不认为他试图重用已经在不同程序集中可用的代码。 - NerdFury
@NerdFury:我知道.cs文件目前不在程序集中,但是我认为将它们打包成一个程序集(或多个程序集)以供多个项目使用可能是一个好主意。这可能被强制纳入 IDE 的处理方式中,但我认为这就是提出的问题的答案。 - Michael Burr
从我阅读问题中得到的信息来看,他似乎有这样一个场景:http://screencast.com/t/YzFjY2Ux,他正在尝试使其工作。我认为他正在与IDE进行斗争,并且通过尝试维护这种结构会让事情变得更加困难。 - NerdFury
@NerdFury:噢,我明白了。是的,我认为你说得对,他将不得不继续与IDE抗争,才能走下这条路。这可以通过他现在的方式完成,但是显然IDE不会让它变得容易。 - Michael Burr
是的,你们都对。我正在与IDE斗争,当我意识到这一点时,我写了我的原始帖子 :) 如果您有几分钟的时间,请看看我在NerdFury答案下的评论。 - Pete d'Oronzio

1

如果您想在项目中“引用”matrix.cs,请不要使用“添加现有项”,而是创建对包含matrix.cs的类库或对象的引用(“添加引用”)。如果您不想(或无法使用)包含matrix.cs的库或对象,则“添加链接”是您访问它的方式,但说实话,我从未使用过那个特定的功能。

我曾经与的.NET开发人员中没有一个将他们的.cs文件隔离在单独的文件夹中。我见过的唯一类似于这样的分离做法是在MVC中,其中模型、视图和控制器位于各自的文件夹中。


谢谢。我的意图是将matrix.cs和其他.cs代码放在PdMagic.Common.Math库中,以便其他项目可以引用它。如果您不介意,请查看我原始帖子上的评论。工具供应商如何处理SL和WPF代码的常见.cs情况?这些通常可以是相同的.cs,但需要为每个构建不同的程序集。 - Pete d'Oronzio

1

因为您想在项目中引用 matrix.cs,所以不要仅使用 AddExistingItem,而是创建一个对该类的新引用。




0
在 Visual Studio 2019 中,操作步骤如下:
  1. 右键单击项目
  2. 添加
  3. 现有项
  4. 选择文件
  5. 展开“添加”旁边的菜单
  6. 添加为链接

First Second


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接