how do transitive dependencies work? - C#