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

8
我在Visual Studio 2010中有一个C#控制台应用程序,它有一个Main()方法以及一堆实用类。我希望那些实用类可以供其他解决方案使用。从网上的阅读中,似乎我需要将其编译为类库(DLL)。所以我做了以下操作:
  • 进入Visual Studio的“项目> [项目名称]属性>应用程序”,将“输出类型”从“控制台应用程序”更改为“类库”
  • 重新构建;ProjectName.dll将在bin / Debug中创建。
  • 创建一个新的控制台应用程序
  • Solution Explorer>添加引用>浏览到ProjectName.DLL,选择它。
然而,IntelliSense和对象浏览器都无法在DLL中找到这些类。
我尝试将几个不同的控制台应用程序重新编译为类库,并得到了相同的结果。我还注意到,如果我最初将解决方案创建为类库,则可以正常工作,但是如果稍后将其转换为类库,则不能正常工作。
有什么提示吗?

我假设你知道你的类库中类的命名空间?如果你在新的控制台应用程序代码中没有添加“using Namespace;”,那么你需要完整限定类的命名空间引用。 - tawman
2
在你的类库中,确保你的类也被标记为公共的。 - tawman
1
确保你的类和方法是公共的。 - Martin Buberl
我把它们从内部改成了公共的,然后它就可以工作了。谢谢大家。 - RexE
5个回答

6

你不需要将它构建为dll文件。VS 2010(我记得2008也可以)允许引用exe程序集。你只需要确保相关类型被声明为public - 如果没有添加说明符,顶级类默认为internal


1
有人不也可以创建一个“类库”类型的项目吗? - Ethan Bierlein

2

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


1
我一直以来的做法(因为这是我通常使用的C++静态库的做法,虽然我认为它对C#也有一些优势)是将类库项目添加到解决方案中,然后在使用它的项目(或项目)中添加引用。当您要添加引用时,潜在引用列表包括来自解决方案的项目,所以应该很明显该怎么做。然后,您应该可以获得库的智能感知。
这种做法的一个优点是,如果您需要编辑库项目中的文件,这非常简单,因为它们就在手边,而且在编译解决方案时,项目会自动重新构建。

0

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


0

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

其次,我尝试复制您的情况,但是......没有效果。我的VS显示了来自ConsoleApplication1.dll的类型/方法。我能想到的一个原因是您忘记为实用程序类设置可见性修饰符(public关键字)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接