问题
While developing a sample web app in .NET Core 1.1 and Visual Studio 2017 RC, I realized the following:
As you can see:
- ClassLibrary3 has a reference to ClassLibrary2,
- and ClassLibrary2 has a reference to ClassLibrary1
I wrote a simple method in class Class3 of ClassLibrary3 project, and the Intellisense allowed me to use Class1 just writing the name of the class, I mean, without doing an explicit reference to ClassLibrary1 project.
Am I missing some point here? I don\'t want somebody simply comes and overlooks ClassLibrary2.
Thanks.
回答1:
Transitive project-to-project references are a new feature of Visual Studio 2017 and Microsoft.NET.Sdk. This is intentional behavior.
See https://github.com/dotnet/sdk/issues/200.
回答2:
If you're interested in disabling the transitive reference behavior, I finally found a way.
If you want Project A to reference B and B to reference C, but don't want A to reference C, you can add PrivateAssets="All"
to B's ProjectReference to C, like so:
In B.csproj
<ItemGroup>
<ProjectReference Include="..\C\C.csproj" PrivateAssets="All" />
</ItemGroup>
This setting makes C's reference private so it only exists within B. Now projects that reference B will no longer also reference C.
Source: https://github.com/dotnet/project-system/issues/2313
来源:https://stackoverflow.com/questions/42428571/transitive-references-in-net-core-1-1