如何删除对 Dependencies/Frameworks/Microsoft.NETCore.App 中未使用程序集的引用?
Posted
技术标签:
【中文标题】如何删除对 Dependencies/Frameworks/Microsoft.NETCore.App 中未使用程序集的引用?【英文标题】:How to remove reference to unused assembly inside Dependencies/Frameworks/Microsoft.NETCore.App? 【发布时间】:2021-11-18 22:04:41 【问题描述】:.NET 6 框架中有一些程序集,我 100% 肯定我永远不会使用它们,但是它们仍然出现在依赖项列表中,ReSharper(也可能是裸 VS)在导入类型时仍然会建议它们,而且总的来说它们的存在很烦人。
例如,我 100% 确定我永远不会使用 Microsoft.Win32.Registry
或 System.Drawing
,但在编写 Color
时,我看到 IDE 建议我无法真正使用的类型。我正在放弃我的仅限 Windows 的方式,我不想再看到这些。
我在选择节点后尝试按Delete,没有任何反应。我尝试将<Reference Remove="System.Drawing" />
添加到我的 .csproj 文件中,但没有任何反应。我尝试使用“删除未使用的引用”,没有任何反应。
问题:有没有办法摆脱这些引用?将它们从列表中删除是完美的,但将它们从 VS/R# 的建议中隐藏也可以。
我发现了多个关于删除 SO 上的引用的问题,但它们似乎都是关于 .NET 4.x,关于添加替代方案,所有这些对我的情况都没有用。
VS2022 17.0.1,R# 2021.3 EAP,.NET 6.0,最新的一切。
【问题讨论】:
你的TargetFramework
是什么?
@GuruStron <TargetFramework>net6.0</TargetFramework>
您需要创建自定义 SDK 定义。一种只导入您需要的东西。 ***.com/a/56178624/736079
@jessehouwing 这种方法有什么方向吗?我看到System.Drawing
只在Microsoft.NET.Sdk.WindowsDesktop.WindowsForms.props
和Microsoft.NET.Sdk.BeforeCommon.targets
中被提及,它们似乎都只适用于WinForms 和.NETFramework 案例。 Microsoft.Win32.Registry
仅在 Microsoft.NET.DefaultPackageConflictOverrides.targets
中提及,我假设它用于删除较新 .NET Core 版本的 NuGet 引用。如果一开始没有包含自定义 SDK,我该如何删除它?
【参考方案1】:
这些程序集称为MetaPackages
,您无法删除它们。这是一个类似的问题,可能会对您有所帮助:
How to remove extra reference from Microsoft.AspNetCore.All Meta package
【讨论】:
这似乎适用于较旧的 .NET Core 版本,其中所有这些包实际上以 NuGet 包的形式作为单独的实体存在,并被复制到我的编译文件旁边。我现在没有看到任何这种情况发生。【参考方案2】:你不能在那里删除它,但是在你的项目构建之后,你可以用一些工具“treeshake”所有未使用的部分。大多数混淆器都有用于此目的的功能,我相信 ILMerge 也有一个开关来修剪未使用的类型(编辑:no it does not)。
请注意,如果您使用反射分配,则在删除没有静态引用但始终通过反射动态加载的类型时,您可能会遇到 TypeLoadException。使用这些类中的属性 [ObfuscationAttribute(Exclude=true)] 可能会有所帮助,但实际上该属性没有特定的属性来防止类被删除(只有属性本身)。特定的混淆器将有自己的选项或功能来防止修剪。
在 .Net 6 中,您可以使用 Visual Studio 将项目发布到文件夹,选择自包含,在文件发布选项中您将找到“生成单个文件”。这将尝试修剪任何未使用的(框架)程序集。它不会修剪使用过的程序集中未使用的类。
如果你想阻止不需要的选项出现在 Intellisense 中,我猜你不走运。您可以使用旧版本的 Visual Studio,它只会显示定义范围内可用的项目(在项目中以及您的 namespace
或 class
的 using
列表中引用)。我个人认为较新的智能感知建议很有帮助,当我只记得类名时,它可以让我免于查找命名空间和程序集名称。
【讨论】:
以上是关于如何删除对 Dependencies/Frameworks/Microsoft.NETCore.App 中未使用程序集的引用?的主要内容,如果未能解决你的问题,请参考以下文章