.NET Core项目如何隐藏NuGet包引入的第三方DLL?
解决NuGet包第三方DLL在.NET Core项目中显示的问题
这个问题的根源其实是.NET Core采用的SDK风格项目和传统.NET Framework项目的MSBuild行为差异:在.NET Framework里,通过targets导入的<None>项不会自动显示在项目结构中,但SDK风格项目会默认把这些导入的文件展示出来,除非你明确告诉它要隐藏。
直接修改你的MyLib.targets文件,给<None>节点加上<Visible>false</Visible>配置就行,这样既能保留复制到输出目录的功能,又能让这些第三方DLL不在Visual Studio项目里显示:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <NativeLibs Include="$(MSBuildThisFileDirectory)**\*.*" Exclude="$(MSBuildThisFileDirectory)**\*.targets" /> <None Include="@(NativeLibs)"> <Link>%(RecursiveDir)%(FileName)%(Extension)</Link> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <Visible>false</Visible> <!-- 新增这一行,隐藏文件 --> </None> </ItemGroup> </Project>
修改完成后,按以下步骤操作:
- 重新打包你的NuGet包
- 更新项目里的包引用,清理项目的
bin和obj目录 - 重新生成项目,你会发现那些第三方DLL不再出现在项目根目录里了,同时依然会正常复制到输出目录
原理很简单:<Visible>false会告诉MSBuild和Visual Studio,这些文件不需要显示在项目结构中,但它们的其他属性(比如CopyToOutputDirectory)依然会生效,完美解决你的问题。
内容的提问来源于stack exchange,提问作者user007
相关产品推荐
相关产品推荐

