 <blockquote> <p>Can anyone help me to understand why is it so?</p> </blockquote> <p>The C# compiler has the reasonable expectation that the <em>transitive closure of the referenced assemblies</em> is available at compile time. It does not have any kind of advanced logic that reasons about what it definitely needs, might need, might not need, or definitely does not need to know in order to solve all the problems in type analysis that your program is going to throw at it. If you reference an assembly directly or indirectly, the compiler assumes that there might be type information in there that it needs.</p> <p>Also, if you don't have the set of referenced assemblies <em>at compile time</em> then what expectation is there that users will have them at runtime? It seems reasonable to expect that the compile time environment has at least the set of assemblies that are going to be required at runtime.</p> <blockquote> <p>I don't want to do it. </p> </blockquote> <p>We all have to do things we don't want to do in life. </p>