如何将C#代码编译为库而不是可执行文件?

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

  • 在Visual Studio中“Project> [ProjectName]属性>应用程序”并将“输出类型”从“控制台应用程序”更改为“类库”
  • 重建; ProjectName.dll是在bin / Debug中创建的。
  • 创建了一个新的控制台应用程序
  • 解决方案资源管理器>添加引用>浏览到ProjectName.DLL,选择它。

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

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

有小费吗?

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

我一直在做什么(因为这是你用C ++静态库做的,这是我通常使用的 – 虽然我认为它对C#也有一些优点)是将类库的项目添加到解决方案中,然后添加一个引用在使用它的项目(或项目)中。 当您添加引用时,潜在引用列表包含解决方案中的项目,因此应该相当明显该做什么。 然后你应该为你的图书馆获得intellisense。

以这种方式执行操作的一个优点是,如果您需要编辑库项目中的文件,那么它非常简单,因为它们非常接近,然后在编译解决方案时自动重建项目。

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

确保dll项目中的类是公共的。

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

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