【问题标题】:.NET Core and .NET Standard projects don't do an incremental build.NET Core 和 .NET Standard 项目不进行增量构建
【发布时间】:2017-02-06 17:46:46
【问题描述】:

我在我的桌面解决方案中使用 .NET 标准库,因此我可以在我的桌面和 Web 解决方案之间共享这些库。但是,我现在看到增量构建问题。有没有其他人经历过或设法解决它?

我可以看到 .NET 标准库具有一些增量构建功能,如果我使用“dotnet build”在命令行上构建它们,则需要 1 秒,然后如果我在其中进行代码更改库并再次运行需要 2 秒。如果我第三次跑步,这会回到 1 秒。

但是,在纯 .NET 框架应用程序(如控制台应用程序或 wpf 应用程序)中,传统上如果您不更改代码,那么在 Visual Studio 中它甚至不会尝试构建项目。它只是说“1 个最新的”。我看到 .NET 标准库总是重新复制到输出目录,它们还会导致我的整个 WPF 项目每次都重新构建。过了一段时间,如果每次代码更改都需要 5 秒来构建,这就会开始变得烦人!

【问题讨论】:

  • 你不需要复制/分发框架自带的.net库
  • 这不是重复的。首先,C# compile/build 是用词不当。这确实是一个 MSBuild 问题。其次,此问题特定于 .NET Core 和 .NET Standard,它们在 VS 2015 中不支持 Visual Studio,这是问题可能涉及的最新版本。

标签: c# .net asp.net-core


【解决方案1】:

我至少可以为您提供部分答案。每次都复制二进制文件的问题被微软解释为there is no support, update to a later target framework version

此时,我们不会对工具随附的兼容垫片进行任何智能修剪,因此最终会全部复制它们。如果您(或您的依赖项)不依赖它们,删除/不部署它们是安全的,但盲目地这样做可能会破坏您的一些依赖项。

这应该在 4.7.1 中修复

值得一提的是,使用 .NET Framework 4.7.1 及更高版本,您无需为 .NET Standard 部署任何额外文件。如今,如果您以 Xamarin 或 .NET Core 为目标,情况已经如此。

至于为什么它总是复制,而不是有选择地这样做,我不确定。我已经搜索了构建日志,我认为这些文件没有正确添加到构建目标的输出列表中,但很难诊断。 Visual Studio 还具有完全避免调用 MSBuild 的智能方法,因此 MSBuild 脚本中跳过目标的逻辑甚至不必运行。 Visual Studio 主要是一个黑匣子,但根据你和我观察到的行为,我怀疑这个逻辑也被破坏了。

这是一个令人沮丧的问题,因为仍然有充分的理由以旧版本的 .NET Framework 为目标,例如,如果将库分发给可能使用 Visual Studio 2013 对其进行构建的客户,并且无法期望更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    相关资源
    最近更新 更多