The idea of truly protecting resources is impossible -- every protection you implement can and will be broken. Assume this, and do not put credentials or private data in your resources/code.
The idea behind resource encryption/compression is summarized well in this codeproject article, the same ideas apply to .NET. You use some encryption method, add the encrypted file to your project, load it via your code, and run your decryption/decompression algorithm on it.
Realistically, though, it sounds like you're looking for a .NET obfuscator with compression features. I don't believe stackexchange is the place for product advertisement, so here is a good objective list: http://en.wikipedia.org/wiki/List_of_obfuscators_for_.NET
In regards to making cracking your application more difficult, you should consider using asymmetric encryption as described here and license key files. Think of creative ways to perform license checks throughout your application. Using a keyfile you're preventing the possibility of anyone ever writing a keygen for your application, and adding a large number of checks for the license will make it arduous for anyone attempting to crack the application.