说我有foo.cs
和bar.cs
。如果我为每个源文件创建两个单独的项目并将它们编译为两个DLL,我在导入和在其他项目中使用它们没有问题。
如果我想要输出单个DLL,我该怎么办?(保留单独的源文件)DLL文件可以有两个名称空间吗?如果没有,我如何将foo
和bar
的内容放入单个命名空间? (我可以编辑它们)
答案 0 :(得分:5)
您只需将两个文件都添加到同一个项目中。
DLL文件可以有两个命名空间吗?
是。相反,一个命名空间可以用在多个DLL中。
答案 1 :(得分:5)
如果我创建两个单独的项目
创建一个包含两个文件的项目,以生成一个DLL作为输出。命名空间可以是您想要的任何内容,但是约定表明项目中的类共享一个公共的根命名空间。
答案 2 :(得分:2)
见ILMerge。
微软说:
ILMerge是一个实用程序,可用于将多个.NET程序集合并到一个程序集中。可以从Tools & Utilities的Microsoft .NET Framework Developer Center页面免费使用。
命名空间完全独立于源文件和项目。您可以在一个项目中甚至在一个文件中具有多个名称空间,也可以在多个项目中使用一个名称空间。因此,您可以在一个项目中拥有多个源文件(除非是“Hello World”项目,否则每个项目几乎总是有很多源文件)
您可以在“应用程序”选项卡的“默认命名空间”字段中更改项目属性中新源文件的默认命名空间。您还可以在项目中创建新文件夹和子文件夹。这些文件夹的名称会自动添加到在这些文件夹中创建的新源文件的默认命名空间中(以点.
分隔)。因此,您始终可以手动编辑命名空间语句。您可以添加或删除并嵌套命名空间语句。
您还可以在一个解决方案中拥有多个项目。您甚至可以在一个解决方案中混合使用不同类型和语言的项目(例如VB和C#)。每个项目通常会生成一个程序集(dll或exe)。从技术角度来看,项目是否在同一解决方案中没有区别。这只是一个组织问题。
见:
复杂解决方案的示例:
答案 3 :(得分:0)
C#名称空间非常开放。
是的,您可以在一个库中拥有多个名称空间。
但是:您可以将内容添加到现有名称空间中。例如:您可以将扩展方法添加到System.Linq
命名空间中,这样您只需包含该dll而无需其他包含。
答案 4 :(得分:0)
您可以在单个项目中拥有多个子命名空间。但是,最好至少给项目(以及编译后的DLL)一个总体命名空间。
答案 5 :(得分:0)
如果您只需要在这些文件中合并单个类,则可以使用partial classes
但他们无论如何都必须在同一名称空间中。