【发布时间】:2019-09-16 06:47:21
【问题描述】:
最新:
这绝对是 msbuild 中的一个错误。除此之外不能有任何其他解释。这只能在 Linux 上发生,或者可能在更广泛的范围内发生。
所以我决定只构建一个项目,在解决方案中完全不依赖其他项目。
查看捕获的诊断信息,我发现这些行很有希望:
Skipping target "CoreCompile" because all output files are up-to-date with respect to the input files.
Input files: Annotations.cs;Auth.cs;AuthorizationConfig.cs;Backend.cs;Billing.cs;Code.cs;...
Output files: .obj/TheAgent.dll;.obj/TheAgent.pdb
Set Property: NoWarn=;1701;1702
15:23:27.396 1>Done building target "CoreCompile" in project "TheAgent.csproj".: (TargetId:40)
看起来我的 dll 和我的 pdb 没有按照我的预期构建。 但是,必须在导致时间戳更改之前或之后发生某些事情(是这个构建时间而不是最后一个构建时间)。
dll 的时间戳在中间对象文件夹 (.obj/) 和输出文件夹中都会更新。
有没有一种已知的方法可以在 msbuild 的 CoreCompile 任务之后立即停止它?
更新:
这次我决定搜索is newer 并找到了这些实例。我不知道他们是如何获得解决方案/项目文件的:
Input file ".obj/Common.csproj.CoreCompileInputs.cache" is newer than output file ".obj/Common.pdb".
除此之外,我还遇到了这个: https://github.com/dotnet/project-system/issues/4736
认为这是问题所在,我升级到 dotnet sdk 版本 2.2.402。 最终结果还是一样的:(
原文:
我需要一些关于如何解决此问题的指示。我正在使用 /t:build 构建解决方案文件。 生成的可执行文件每次都会不断刷新。
首先我认为package restore 是造成这种情况的原因。我已经删除了该步骤,但它没有任何区别。
然后我看了这个: https://oz-code.com/blog/visual-studio-keeps-rebuilding-projects-no-good-reason/
我基本上是在诊断输出中寻找一些文本,它告诉我目标或文件是否已过时并且需要重建。上面的链接谈到“项目'B'不是最新的”。我的 msbuild 输出中没有 not up to date。
我已经有两个使用 CopyAlways 的资源,我将其更改为 CopyIfNewer。
上面的文章还谈到了循环依赖。我正在手动检查所有内容。是的,对依赖项目的引用实际上是对项目输出(dll 的/exe)的引用。因此,仅通过检查该模式来寻找循环依赖似乎有点奇怪。
【问题讨论】:
-
你有Minimal, Reproducible Example吗?否则,如果不知道您的设置,就无法回答这个问题。
-
不,我没有。而且我不会走那条路。尝试重建现有事物所付出的努力很可能比找出错误所需的努力更大
-
好建议。我已经尝试过适用于我的案例的那些。 msbuild是破期。我已将问题简化为一个独立项目,但它失败了。我在主帖中有一个指向 github 问题的链接
标签: msbuild