Visual Studio中类似于Delphi的“搜索路径”的功能是什么?

4
我创建了一个C#类并定义在.cs文件中,现在我想在新项目中使用这个类,但不想将该文件复制到新项目目录中。请问如何在新项目中引用该类而不复制文件?
在Delphi中,答案是“将类定义位置添加到搜索路径中”。但我无法找到好的答案。
我尝试过以下方法: 1. 项目->属性->引用路径->添加类的位置(仍然未解决对类的引用)。 2. 右键单击项目->“添加现有项”->选择类(会在我的项目文件夹中创建一个新的独立副本)。 3. 右键单击项目->“添加引用”->发现它需要编译后的目标,如DLL。
参考链接:
4个回答

7

你现在进入了一个全新的世界,这里没有相对应的东西。

如果你想分享类而不是复制它,可以创建一个类库并将其构建到该库中。然后从你的项目中引用已构建好的库。

你可以向解决方案添加一个类库,并在开发过程中引用该项目。如果你曾经使用过BPL,那么类库的功能与之非常相似。

一旦你有了一个类库,就可以在你的解决方案之间共享该库。可以通过两种方式来实现--通过构建库并共享二进制文件--或者在你的解决方案中包含类库项目。起初,你可能想采用后一种方法,直到你掌握了它的要领,但是一旦事情变得相当庞大,你的共享代码也稳定下来,最好引用预先构建好的二进制文件。

这里有一个学习曲线,但到最后,你会受益匪浅。

祝你好运。


@JosephStyons - 嘿,我曾经也走过你现在所处的地方,在长期看来,你会发现这是一个更美好的世界。也许这是在吹牛。 - Neil
3
@Joseph,这确实是你应该管理 Delphi 代码的方式。允许每个单元属于一个项目,并且永远不要让 Delphi 编译不属于当前项目的单元。这有助于防止你在不属于项目的单元中编写特定于项目的代码。如果两个项目需要共享一些代码,请将其放在库中显式共享。这也可以防止你意外共享未打算共享的代码。(将 Magic.pas 文件夹添加到搜索路径意味着你可以访问该目录中的 所有 文件!) - Rob Kennedy
2
@JosephStyons - 我经常发现自己费尽心思地让C#的行为像Delphi一样 - 主要是因为我习惯于以Delphi的方式解决问题(虚拟静态成员、单元初始化程序、使用终结器作为析构函数等)。每次我成功了,最终都会后悔。C#和Delphi之间有很多相似之处,但它们各自有自己的方式。 - Neil
我找到的最佳解决方案是使用支持共享文件的源代码控制产品,并将它们共享到解决方案的本地目录中。这样,我们就不依赖于Visual Studio来解决问题,而是将其交给源代码控制来处理。无论好坏,这将使我们与Visual SourceSafe联系在一起;因为它是唯一支持共享单个文件的源代码控制解决方案。 - Ian Boyd
是的,C#几乎不可能编写好的(即单个.exe)Windows应用程序。 - Ian Boyd
显示剩余3条评论

4

Joseph,Visual Studio没有提供这个功能,所以必须手动引用每个类。为了避免在新项目中包含一个副本,你必须使用选项添加现有项并选择添加为链接

alt text


2
+1 我不知道这个功能。我倾向于认为这不是更好的方法 - 尽管它更接近 Delphi 的方式。通过类库共享更符合 .net 的方式,如果你反对它,最终它会回咬你的,我个人认为。 - Neil
我想我很高兴先阅读了类库答案,这样我就必须按照“正确的方式”来做。但这也是好事。谢谢。 - JosephStyons
Add As Link 的问题在于路径现在已经硬编码在项目文件中。当其他开发人员从源代码控制获取项目时,由于他们将公共文件保存在与我不同的路径中(或者我将公共文件保存在与他们不同的路径中),因此无法构建该项目。 - Ian Boyd

2

抱歉,您不能这样做。虽然Delphi提供了这样的功能,但是Visual Studio可能没有这样做,因为最终这可能会导致链接文件混乱。Visual Studio喜欢将相关的文件组织在同一个项目或解决方案中。

如果您想让早期的类可用,则如上所述,您只有两个选项。

1)只需将现有的.cs文件复制到您的项目目录中(右键单击项目 ->“添加现有项” ->选择类)

2)将项目添加到解决方案中(右键单击解决方案 ->添加 ->添加现有项目... ->从文件浏览器中选择项目文件),然后添加类引用(右键单击项目 ->“添加引用” ->在“项目”选项卡中选择您的项目)。它会自动引用.dll。

3)最后一个选项是将您的类编译为.dll,然后在您的项目中添加对它的引用。

祝好运!


一堆链接文件?在Delphi项目里?不可能发生 :) </sarcasm>。在这种情况下,我选择了第三个选项。感谢您的想法。 - JosephStyons
2和3的问题在于a)并非所有开发人员都将dlls放在相同的路径下,b)我必须随我的可执行文件一起发布一个单独的二进制文件。 - Ian Boyd

1

您想引用已编译的 .Net 程序集(在这种情况下是 dll)或解决方案中的另一个项目。如果您有源代码,则将库项目添加到解决方案中,然后将该库项目作为使用它的项目的引用添加。当编译时,它会将 dll 复制到您的生成目录中。使用此方法非常好,因为在使用调试器时,您将能够逐步执行库中的代码。


Visual Studio会将引用的.Net程序集(在这种情况下是dll)编译到我的可执行程序集中,使我只有一个程序集吗? - Ian Boyd
不,这不是默认的。你可以通过某些方法将所有程序集打包到一个文件中,但这是一个全新的话题...请参考https://dev59.com/4XRB5IYBdhLWcg3w4bKv。 - Nate

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