2011-01-22 70 views
8

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

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

但是,智能感知和对象浏览器都不能找到该DLL内部的类。

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

任何提示?

+0

我假设你知道的类在类库中的命名空间?如果你不添加'使用命名空间';在新的控制台应用程序代码中,则需要完全限定对该类的命名空间引用。 – tawman 2011-01-22 22:38:52

+1

在你的班级图书馆里,确保你的班级也被标记为公开。 – tawman 2011-01-22 22:39:13

回答

5

你不需要将它构建为一个dll。 VS 2010(和IIRC 2008)允许引用exe程序集。所有你需要的是他们相关的类型被宣布为public - 如果你没有添加说明符,顶级类别将被忽略为internal

0

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

1

我总是这样做的(因为这是你用C++静态库所做的,这是我通常使用的 - 虽然我认为它对C#也有一些优点)是将类库的项目添加到解决方案中,然后在使用它的项目(或项目)中添加对其的引用。 当你去添加一个引用时,潜在引用的列表包含了解决方案中的项目,所以它应该是相当明显的。然后,您应该为您的图书馆获得智能感知。

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

0

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

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

1

您可以在项目属性切换输出类型类库以及 - 那么你将有一个输出DLL,而不是exe文件

相关问题