【问题标题】:Share c# class source code between several projects在多个项目之间共享 c# 类源代码
【发布时间】:2011-02-09 15:33:08
【问题描述】:

我编写了一个类来处理我的应用程序中的内部日志记录。 现在我想在另一个完全独立的新项目中使用这个类。

我可以简单地将文件复制到新项目文件夹,但我希望只保留一份副本,以便随着时间的推移,其中的所有更改都将应用于两个项目。

我可以使用“添加现有文件”,但是我将文件放在哪里,以便下一个开发人员知道它是必需的。我曾经为此有一个“共享”文件夹,但有一次该文件夹没有被带到下一台开发计算机中。

最好的组织方式是什么,以便它对新维护者最有意义,并最大限度地降低项目中链接断开的风险。

【问题讨论】:

  • 你们真的想告诉我在 C# 中无法实现源级共享吗?
  • @Pavel:尽管我在这里寻找特定于 c# 的解决方案,但这个问题并不是真正的 c# 特定的。我已经遇到过项目中的单个文件丢失的情况,因为它们位于未与其余文件一起发送的另一个文件夹中。
  • 您正在寻找的确切答案可以在下面的 jorgen 帖子中看到。
  • 我发现如果在多个 VS 实例中打开相同的源文件,我的 Visual Studio 会严重变慢。

标签: c# visual-studio code-sharing


【解决方案1】:

您可以通过这种方式创建一个包含此类的库项目,您所要做的就是添加对该项目的引用。

如果这不是选项,您可以使用“右键单击 -> 添加现有项目 -> 添加为链接”这样您只有一份代码副本,但它可以存在于多个项目中。

【讨论】:

  • 存在支持.DLL文件不可用的情况,因此注册的组件必须包含其依赖类
  • 当您按下“添加现有项目”时,“添加为链接”选项在文件选择对话框中的“添加”按钮下拉菜单下可用,以防您找不到它
  • 我发现这个解决方案是最好的,而不是使用共享项目。共享项目的设计非常麻烦,因为您无法添加资源(还有许多其他限制)。然而,问题是额外的 DLL 会导致更多的部署复杂性,并且混淆也是一个问题,因为通常需要公开所有方法。作为一种解决方案,您可以使用混淆工具来合并程序集和内部化方法。现在,您的代码被混淆并包含在调用应用程序中,两全其美。
【解决方案2】:

共享类库是最好的解决方案。

但是您可以将文件作为链接添加到 VS 项目中,而不是复制。为此,请使用添加现有项目对话框的添加按钮上的下拉菜单。

【讨论】:

    【解决方案3】:

    如果您确实需要共享源代码,例如,如果您同时拥有相同程序集的 32 位和 64 位版本(如果您依赖本机代码,则有时需要这样做),您可以使用本帖给出的答案:How do you share code between projects/solutions in Visual Studio?

    (查找'“链接”两个项目之间的代码文件'。)

    【讨论】:

      【解决方案4】:

      将您的日志记录代码分解为单独的程序集。

      然后您可以将该程序集包含在应该使用该记录器的项目中。

      它使一切保持整洁,您只需维护一组代码,而不必担心每个副本。

      【讨论】:

        【解决方案5】:

        创建一个包含此类的新程序集。

        然后你所有的其他项目都可以引用这个程序集并使用其中的类。

        【讨论】:

          【解决方案6】:

          将类放在一个唯一的命名空间中,然后将该文件作为链接添加到您需要使用它的所有项目。确保为将使用该类的唯一命名空间放置一个 using 语句,否则您将必须完全限定对它的每次使用。 对于这种情况,我认为这比汇编更可取,因为它不会生成不必要的交叉汇编引用,因为它是您自己的代码的一部分,您只是希望在项目之间共享。

          【讨论】:

            【解决方案7】:

            您也可以使用您的版本控制系统来执行此操作。

            我们通常使用解决方案和主项目创建目录,然后将此目录提交给 SVN。然后使用 svn:external 链接所有共享库 - 所以所有项目都存在于同一个解决方案目录中。

            提交后,任何人都可以检查所有外部依赖项的工作解决方案。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2023-03-29
              • 1970-01-01
              • 2012-11-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-06-18
              相关资源
              最近更新 更多