c# .net asp.net-core transitive-dependency

c# - Referencias transitivas en.Net Core 1.1



asp.net-core transitive-dependency (2)

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

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, quiero decir, sin hacer una referencia explícita al proyecto ClassLibrary1.

¿Me estoy perdiendo algún punto aquí? No quiero que alguien simplemente venga y pase por alto ClassLibrary2.

Gracias.


Las referencias transitivas 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é una manera.

Si desea que el Proyecto A haga referencia a B y B haga referencia a C, pero no desea que A haga referencia a C, puede agregar PrivateAssets="All" a la Referencia de proyecto de B a C, así:

En B.csproj

<ItemGroup> <ProjectReference Include="../C/C.csproj" PrivateAssets="All" /> </ItemGroup>

Esta configuración hace que la referencia de C sea privada, por lo que solo existe dentro de B. Ahora se proyecta que la referencia B ya no hará referencia a C.

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