It may be helpful when thinking about these problems to consider that your program is NOT the application.
Unity is the application. Unity starts and does all of the usual initial program loading steps that any app must do.
Only once Unity is fully initialized and running does it possibly even have a chance (under certain specific rules) to execute some of your code.
Only after this point can you do ANYTHING with Unity. This means all your constructor time and static field initializers may never access anything in Unity.
But in all cases, your code is NOT the application. This may help you think about the problem more constructively.