When embedding resources with dots in the directory name, MS.NET escapes those dots with an underscore. The directory "mono2.0" becomes "mono2._0" as resource name.
mono-2-10 doesn't do this escaping.
Does this escaping take place in the compiler, MSBuild, the classlibs, or a mixture?
An easy way to check this would be to look at the build output on .NET and check the arguments with which MSBuild is invoking the compiler. Also, when loading the resources at runtime, do you access them with the escaped or unescaped name?
Here's the relevant MSBuild log line:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe [...] /resource:EmbeddedLibs\Npgsql20119.3binmono20\Mono.Security.dll,PrepareEnv.EmbeddedLibs.Npgsql20119._3binmono20.Mono.Security.dll [...]
As you can see, the escaping is already done by the MSBuild task and only happens to the directory name. "Mono.Security" is passed through unharmed.<facepalm/>
Assembly.GetManifestResourceNames() returns the escaped names.