Say I have several .NET assemblies and want to sign each of them with a strong name. Is one keypair (one .snk file) enough or do I need to generate one pair for each assembly? Will I have to publish the public key of (each) keypair?
You need only one .snk file.
You don't need to publish the public key. Any one can get a public key using sn.exe with -p switch.