Understand than ANY approach you take is vulnerable to reverse engineering. The most you can hope for is to make it difficult but not impossible for someone to break your licensing mechanism.
The best way to enforce licensing is to run everything on a server - forcing the clients to connect to a server that your control.
Back to your proposal - some low effort things you can do to validate a DLL is check the assembly attributes.
var self = System.Reflection.Assembly.GetExecutingAssembly();
var assembly = System.Reflection.Assembly.LoadFile("suspect.dll");
Assembly Class (System.Reflection)
Next level up would be a hash function on the DLL file. Compare the hash result to a list of known good hash values - eg. an "allowed" list of DLLs.
Better still, use code signing as a way to authenticate each DLL. You application stores a public key which can be used to validate the signature of the DLL.
You must protect the private key by not sharing it with anyone.
None of these are foolproof. It's all about raising the difficulty level where it is actually cheaper to pay for a license than spend the time to crack it.