【问题标题】:How do I compile C# code as a library instead of an executable?如何将 C# 代码编译为库而不是可执行文件?
【发布时间】:2011-06-13 20:27:24
【问题描述】:

我在 Visual Studio 2010 中有一个 C# 控制台应用程序。它有一个 Main() 方法以及一堆实用程序类。我希望这些实用程序类可用于其他解决方案。从在线阅读看来,我需要将其编译为类库(DLL)。所以这就是我所做的:

  • 在 Visual Studio 中进入“项目 > [项目名称] 属性 > 应用程序”并将“输出类型”从“控制台应用程序”更改为“类库”
  • 重建; ProjectName.dll 是在 bin/Debug 中创建的。
  • 创建了一个新的控制台应用程序
  • Solution Explorer > Add Reference > 浏览到 ProjectName.DLL,选择它。

但是,IntelliSense 和对象浏览器都无法找到该 DLL 中的类。

我尝试将几个不同的控制台应用程序重新编译为类库并得到相同的结果。我还注意到,如果我最初将解决方案创建为类库,它会起作用,但如果我稍后将其转换为类库,则不会。

有什么建议吗?

【问题讨论】:

  • 我假设您知道类库中类的命名空间?如果不添加“使用命名空间;”在您的新控制台应用程序代码中,您需要完全限定对该类的命名空间引用。
  • 在您的课程库中,确保您的课程也被标记为公开。
  • 确保你的类和方法是公开的。
  • 我将它们从内部更改为公开,并且成功了。谢谢大家。

标签: c# visual-studio dll


【解决方案1】:

您不需要将其构建为 dll。 VS 2010(和 IIRC 2008)允许引用 exe 程序集。您只需要声明它们的相关类型 public - 如果您不添加说明符,顶级类默认为 internal

【讨论】:

  • 难道就不能创建一个“类库”类型的项目吗?
【解决方案2】:

您也可以在项目属性中将输出类型切换为类库 - 然后您将输出为 dll 而不是 exe 文件

【讨论】:

    【解决方案3】:

    我一直在做的(因为这是你对 C++ 静态库所做的,这是我通常使用的 - 尽管我认为它对 C# 也有一些优势)是将类库的项目添加到解决方案中,然后在使用它的项目(或多个项目)中添加对它的引用。 当您添加参考时,潜在参考列表包括解决方案中的项目,因此应该相当明显地做什么。然后你应该为你的图书馆获得智能感知。

    这样做的一个好处是,如果您需要编辑库项目中的文件,这非常简单,因为它们近在咫尺,然后在您编译解决方案时会自动重建项目。

    【讨论】:

      【解决方案4】:

      确保您的 dll 项目中的类是公开的。

      【讨论】:

        【解决方案5】:

        首先,从托管库的角度来看,您的托管库是哪种输出类型并不重要。我的意思是您可以从 ConsoleApplication2.exe 项目中成功引用 ConsoleApplication1.exe(因此您没有理由将 ConsoleApplication1.exe 转换为 ConsoleApplication1.dll)。

        第二,我试图重现你的情况,但是......没有效果。我的 VS 显示来自 ConsoleApplication1.dll 的类型/方法。我可以假设的一个原因是您忘记为实用程序类设置可见性修饰符(公共关键字)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-04
          • 1970-01-01
          • 2021-05-18
          • 2014-12-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-08
          相关资源
          最近更新 更多