【问题标题】:VisualStudio copies all dlls to output directoryVisual Studio 将所有 dll 复制到输出目录
【发布时间】:2020-11-21 00:11:12
【问题描述】:

我最近注意到 VisualStudio 开始将我引用的程序集以及更多内容复制到构建目录中。

系统命名空间在我的输出目录中占用了大约 100 个文件,这非常烦人(例如 11x System.IO.XXX、10x System.Diagnostics.XXX、11x System.Net.XXX 等...)。不过,似乎没有其他 GAC 命名空间受到影响。

我没有为调试或发布配置设置任何构建后操作。哎呀,我什至没有在我的项目中引用所有这些(只有 7 个与系统相关的引用),并且所有这些都设置为不复制到我的输出目录中,除了 System.Threading.Tasks.Dataflow 因为它来自 NuGet,但是改变那个没有任何区别。

该项目也没有引用该解决方案中的任何其他项目,也许可以解释该行为,但使用一些 (10) NuGet-Packages。

我可以从哪里开始找出为什么 VS 认为有必要用所有这些垃圾来污染我的构建目录?因为当我删除所有那些不必要的文件时,程序运行得很好。

编辑:
项目是一个普通的 .NET 4.7 项目。按照评论建议将其升级到 4.7.1 确实有助于将混乱的文件从 100 个减少到大约 13 个。有什么办法可以摆脱这 13 个文件?

【问题讨论】:

  • 它是 .NET Core 项目吗?
  • 对于更新为面向 .NETStandard 的 Nuget 包往往会发生这种情况。将项目的目标框架版本更改为至少 4.7.1(隐含 VS2017)或使用旧版本的包。
  • 它不是核心项目,只是4.7。将其更新到 4.7.1 确实将混乱减少到 13 个不必要的引用 - 看起来 Tasks.Dataflow 确实是一个 .NETStandard 库。有什么办法可以摆脱剩下的 13 个?如果不是,那么该评论基本上就是完整的答案。

标签: visual-studio


【解决方案1】:

检查这个 https://docs.microsoft.com/en-us/dotnet/core/project-sdk/msbuild-props TrimmerRootAssembly 部分或更常见的想法 使用AppHost 并将其设置为False。对我来说,它从输出中删除了所有 System.* dll

【讨论】:

【解决方案2】:

在 References 属性中,如果不想复制到本地目录,我们需要将 Copy Local 属性设置为 false

【讨论】:

  • 是的。如果有引用这些 dll 的引用,那么也会被复制
  • 可能是这种情况(Tasks.Dataflow 是源),但我需要复制它,但旁边的所有其他东西已经在 GAC 和 .NET 的一部分中注册,不应复制到输出目录(因为它们已经是 .NET 的一部分),即使它们被 Tasks.Dataflow 引用。
  • 顺便说一句。在源引用上禁用 Copy local 没有任何效果。
  • 您可以尝试执行 CleanBuild 操作然后重新构建
猜你喜欢
  • 2010-12-19
  • 1970-01-01
  • 2011-03-18
  • 1970-01-01
  • 2010-12-14
  • 2013-05-15
  • 1970-01-01
相关资源
最近更新 更多