Referencias transitivas en .Net Core 1.1

Al desarrollar una aplicación web de muestra en .NET Core 1.1 y Visual Studio 2017 RC, me di cuenta de lo siguiente:

enter image description here

Como puedes ver:

  • ClassLibrary3 tiene una referencia a ClassLibrary2,
  • y ClassLibrary2 tiene una referencia a ClassLibrary1

Escribí un método simple en la clase Class3 del proyecto ClassLibrary3, y el Intellisense me permitió usar Class1 simplemente escribiendo el nombre de la clase, es decir, sin hacer una referencia explícita al proyecto ClassLibrary1.

¿Me falta algún punto aquí? No quiero que alguien simplemente pase por alto ClassLibrary2.

Gracias.

Las referencias transitorias de proyecto a proyecto son una nueva característica de Visual Studio 2017 y Microsoft.NET.Sdk. Este es un comportamiento intencional.

Ver https://github.com/dotnet/sdk/issues/200 .

Si está interesado en deshabilitar el comportamiento de referencia transitivo, finalmente encontré la manera.

Si desea que el Proyecto A haga referencia a B y B para hacer referencia a C, pero no quiera que A haga referencia a C, puede agregar PrivateAssets="All" a B ProjectReference a C, de esta manera:

En B.csproj

    

Esta configuración hace que la referencia de C sea privada, por lo que solo existe en B. Ahora los proyectos que hacen referencia a B ya no harán referencia a C.

Fuente: https://github.com/dotnet/project-system/issues/2313