这绝对是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的引用)的引用。因此,仅通过检查模式来查找循环依赖项似乎有些奇怪。
答案 0 :(得分:0)
dotnet平台和/或msbuild中存在另一个问题,导致此操作失败。 其中之一就是这个https://github.com/dotnet/project-system/issues/4736
安装SDK 3.0.100-preview7-012821或更好地解决了问题