.Net Core 1.1 中的传递引用
Transitive references in .Net Core 1.1
在 .NET Core 1.1 和 Visual Studio 2017 RC 中开发示例 Web 应用程序时,我意识到以下几点:
如您所见:
- ClassLibrary3 引用了 ClassLibrary2,
- 并且 ClassLibrary2 引用了 ClassLibrary1
我在 ClassLibrary3 项目的 class Class3 中写了一个简单的方法,Intellisense 允许我使用 Class1 只写 class 的名称,我的意思是,没有明确引用ClassLibrary1 项目。
我是不是漏掉了什么?我不希望有人只是过来而忽略了 ClassLibrary2。
谢谢。
可传递的项目到项目引用是 Visual Studio 2017 和 Microsoft.NET.Sdk 的新功能。这是故意的行为。
如果您对禁用传递引用行为感兴趣,我终于找到了方法。
如果想让项目A引用B,B引用C,但又不想让A引用C,可以在B对C的ProjectReference中添加PrivateAssets="All"
,如下:
在B.csproj
<ItemGroup>
<ProjectReference Include="..\C\C.csproj" PrivateAssets="All" />
</ItemGroup>
此设置使 C 的引用私有,因此它仅存在于 B 中。现在引用 B 的项目将不再引用 C。
你有两个选择。
在ClassLibrary1.csproj中使用DisableTransitiveProjectReferences
属性
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<DisableTransitiveProjectReferences>true</DisableTransitiveProjectReferences>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\ClassLibraryCore2\ClassLibraryCore2.csproj" />
</ItemGroup>
</Project>
在ClassLibrary2.csproj中使用PrivateAssets="All"
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\ClassLibraryCore3\ClassLibraryCore3.csproj"
PrivateAssets="All" />
</ItemGroup>
</Project>
我在其他中解释了更多差异。
在 .NET Core 1.1 和 Visual Studio 2017 RC 中开发示例 Web 应用程序时,我意识到以下几点:
如您所见:
- ClassLibrary3 引用了 ClassLibrary2,
- 并且 ClassLibrary2 引用了 ClassLibrary1
我在 ClassLibrary3 项目的 class Class3 中写了一个简单的方法,Intellisense 允许我使用 Class1 只写 class 的名称,我的意思是,没有明确引用ClassLibrary1 项目。
我是不是漏掉了什么?我不希望有人只是过来而忽略了 ClassLibrary2。
谢谢。
可传递的项目到项目引用是 Visual Studio 2017 和 Microsoft.NET.Sdk 的新功能。这是故意的行为。
如果您对禁用传递引用行为感兴趣,我终于找到了方法。
如果想让项目A引用B,B引用C,但又不想让A引用C,可以在B对C的ProjectReference中添加PrivateAssets="All"
,如下:
在B.csproj
<ItemGroup>
<ProjectReference Include="..\C\C.csproj" PrivateAssets="All" />
</ItemGroup>
此设置使 C 的引用私有,因此它仅存在于 B 中。现在引用 B 的项目将不再引用 C。
你有两个选择。
在ClassLibrary1.csproj中使用
DisableTransitiveProjectReferences
属性<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> <DisableTransitiveProjectReferences>true</DisableTransitiveProjectReferences> </PropertyGroup> <ItemGroup> <ProjectReference Include="..\ClassLibraryCore2\ClassLibraryCore2.csproj" /> </ItemGroup> </Project>
在ClassLibrary2.csproj中使用
PrivateAssets="All"
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> </PropertyGroup> <ItemGroup> <ProjectReference Include="..\ClassLibraryCore3\ClassLibraryCore3.csproj" PrivateAssets="All" /> </ItemGroup> </Project>
我在其他