As @amdluigi writes: "As a rule, the assembly name matches the name that it contains, but not always."
In Object Explorer in Studio, there is a screenshot from System.Data.dll. This is a great example to study problems here. Note that most of the namespaces contained in the assembly are System.Data or the System.Data namespace.
In general, it’s good that assembly names should be associated with namespaces inside them. Note that when Studio first creates a project to build the assembly, one of the project properties is the default namespace. First, Studio provides a default namespace with the same name as the project itself. If you ever want to rename a project, consider changing your default namespace as well.
There are two additional namespaces: Microsoft.SqlServer is understandable. Some types of SQL Server that they did not want to pack into a separate assembly.
But what about System.Xml ???? There is an assembly of System.Xml.dll. Why is this namespace also displayed in System.Data.dll?
Note that the assembly can re-open the namespace and add more to it - exactly what System.Data.dll does with the System.Xml namespace.
The reason is that namespaces have zero performance values, but there are a lot of assemblies. If you have 1000 classes with a lot of code, you do not want one assembly to have a very large amount of memory. Also you do not want 1000 assemblies each with one class. Any assembly must be loaded into memory before its contents are completed. You want the assembly to contain a reasonable number of interconnected classes, so as soon as your application has loaded the assembly to get one of its classes, it will receive the other classes that the application will most likely need. Granularity is important: not too big, not too small, simple.
Note that System.Data.dll reopens System.Xml and adds exactly one class: XmlDataDocument. It happens that this class is used to interpret relational data as an XML document. If your application just uses XML, it does not need this class. If your application deals with relational data, it can. Thus, although XmlDataDocument is inherited from XmlDocument and located in the System.Xml namespace, it is packaged in the System.Data.dll assembly.
All this is especially important if you have a background with Java, where there is only one concept, a package. There are two in .NET, assembly and namespace. These two are orthogonal. Obviously, an assembly contains more than one namespace. An assembly can reopen the namespace and add more to it — in other words, types in the namespace can span more than one assembly.