What does it mean to sign an assembly? And why is it done?
What is the simplest way to sign it? What is the .snk file for?
It means to give the assembly a unique identity. This is done so there exists a guarantee that an assembly came from a particular source. See the MSDN article Strong-Named Assemblies. A strong-named assembly supports Side by Side Execution, Assembly placement in the GAC, Versioning, and a few other features.
The simplest way to sign is using the project properties in Visual Studio, the signing tab. This actually adds an XML entry in the .csproj file that tells the build engine to sign the assembly with said key file. The key file is this ".snk" file we are speaking off. It is generated using the sn.exe .NET tool. It contains all information necesary to sign an assembly.