【问题标题】:Visual Studio equivalent of the Delphi "search path"相当于 Delphi“搜索路径”的 Visual Studio
【发布时间】:2011-06-12 04:59:13
【问题描述】:

我在 .cs 文件中定义了一个 C# 类,我在现有项目中使用了该类。 我们称它为 Magic 类,在 Magic.cs 中定义。

现在我正在开发一个新项目,我想在我的新项目中实例化该类的一个实例。

如何在我的新项目中引用该类而不实际将文件复制到新项目的目录中?

在 Delphi 中,答案是“将类定义的位置添加到搜索路径”。这是一个令人尴尬的愚蠢问题,但我在任何地方都找不到好的答案。

这是我尝试过的:

1 - Project->Properties->Reference Paths->添加我的类的位置(对类的引用仍未解决)

2 - 右键单击​​项目 -> “添加现有项目” -> 选择类(在我的项目文件夹中创建一个新的单独副本)

3 - 右键单击​​项目 -> “添加引用” -> 看到它需要一个像 DLL 这样的编译目标。

另见

【问题讨论】:

    标签: c# visual-studio-2008 delphi


    【解决方案1】:

    你进入了一个全新的世界。没有等价物。

    如果您想共享该类而不复制它,请创建一个类库并将您的类构建到该库中。然后你从你的项目中引用那个构建的库。

    您可以在开发时将类库添加到您的解决方案并引用项目。如果您曾经使用过类库,那么类库的行为与 BPL 的行为非常相似。

    一旦你有了一个类库,你就可以在你的解决方案之间共享这个库。这可以通过 2 种方式完成 - 通过构建库和共享二进制文件 - 或通过在您的解决方案中包含类库项目。起初,您可能希望使用后一种方法,直到您掌握了窍门,但是一旦事情变得相当大并且您的共享代码稳定下来,最好引用预构建的二进制文件。

    这里有学习曲线 - 但最终你会变得更好。

    祝你好运。

    【讨论】:

    • 哦,大声哭泣。谈论让简单的事情变得困难。这是惊人的迟钝。 我的意思是,呃……这太棒了,真的让我很开心。感谢您的出色回答。
    • @JosephStyons - 嘿,我已经经历了你现在所处的位置,从长远来看,你会发现这是一个更美好的世界。也许这就是酷话。
    • @Joseph,这也是您管理 Delphi 代码的真正方式。让每个单元只属于一个项目,决不能让Delphi编译一个不属于当前项目的单元。它有助于防止您在不属于项目的单元中编写特定于项目的代码。如果两个项目需要共享一些代码,请将其放入库中以明确共享。这也可以防止您意外共享您不打算共享的代码。 (将 Magic.pas 文件夹添加到您的搜索路径意味着该目录中的 所有 文件都可以访问!)
    • @Rob:点了,感谢您的建议。不过,在我目前的(小)项目中,这似乎有点矫枉过正。 FWIW,在我们都进行过这种交流的时候,我创建了几个类库,并将两个项目都指向它们,这并不是那么难。不过,我仍然想发牢骚。
    • @JosephStyons - 我经常发现自己向后弯腰寻找让 C# 像 Delphi 一样运行的方法 - 主要是因为我考虑如何在 Delphi 中解决问题(虚拟静态成员,单元初始化器,使用像析构函数这样的终结器等)。每次我成功了,从长远来看,我最终都会后悔。 C# 和 Delphi 有很多相似之处,但它们各有各的方式。
    【解决方案2】:

    Joseph,Visual Studio 不提供此功能,因此必须手动引用每个类。无论如何,为了避免每次都创建包含在新项目中的类的副本,您必须使用选项 Add existing item 选择 add as link

    【讨论】:

    • +1 我不知道这个功能。我倾向于说这不是更好的方法——尽管它更接近德尔福的方式。通过类库进行共享更符合 .net 方式,如果你最终反对它,它会咬你一口 IMO。
    • 我想我很高兴我先阅读了类库的答案,所以我必须以“正确的方式”去做。但这很高兴知道。谢谢
    • 添加为链接的问题是路径现在被硬编码在项目文件中。当其他开发人员从源代码​​控制中获取项目时,它将无法构建,因为他们将公共文件保存在与我不同的路径中(或者我将公共文件保存在与他们不同的路径中)。
    【解决方案3】:

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

    如果您想让之前的课程可用,那么如上所述,您只有两个选择。

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

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

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

    祝你好运

    【讨论】:

    • 一堆链接文件?在德尔福项目中? Naa 永远不会发生 :) 。在这种情况下,我选择了选项 3。感谢您的想法。
    • 2 和 3 的问题是 a) 并非所有开发人员都将 dll 放在同一路径中,并且 b) 我必须随可执行文件一起提供单独的二进制文件。
    【解决方案4】:

    您想要引用已编译的 .Net 程序集(在本例中为 dll)或属于您的解决方案一部分的另一个项目。如果您有源代码,则将库项目添加到您的解决方案中。然后添加库项目作为对使用它的项目的引用。当它编译时,它会将 dll 复制到您的构建目录中。使用这种方法很好,因为您可以在使用调试器时单步执行库中的代码。

    【讨论】:

    • Visual Studio 是否会将引用的 .Net 程序集(在本例中为 dll)编译到我的可执行程序集中 - 只留下一个程序集?
    • 不是默认的,没有。您可以通过多种方式将所有程序集放入一个文件中,但这是一个全新的主题……请参阅stackoverflow.com/questions/476993/…
    猜你喜欢
    • 2010-09-07
    • 2017-07-11
    • 1970-01-01
    • 2017-09-19
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 2010-09-14
    • 2010-12-21
    相关资源
    最近更新 更多