我有一个包含多个C#项目的Visual Studio解决方案,当它们完全没有进行任何更改时,它会不必要地重建解决方案的一些项目。
将构建输出设置为" Diagnostic"在某些相关帖子中建议的级别,我收到了一堆格式如下的消息: Project' company.xxx'不是最新的。输入文件' c:... \ company.yyy.dll'在输出文件&c; c:... \ company.yyy.pdb'之后修改。
Company.xxx使用Copy Local = true引用company.yyy项目。
有什么想法吗?
答案 0 :(得分:0)
这与增量构建有关。您可以参考以下信息作为一个简单的理解,您可以参考Incremental Builds了解更多详细信息。
目标元素可以同时具有Inputs属性,该属性指示目标>的哪些项目。期望作为输入和Outputs属性,它指示它作为输出产生的项目MSBuild尝试在这些属性的值之间找到1对1的映射。如果存在1对1映射,MSBuild会将每个输入项的时间戳与其对应输出项的时间戳进行比较。将没有1对1映射的输出文件与所有输入文件进行比较。如果项目的输出文件与其输入文件或文件的年龄相同或更旧,则该项目被视为最新。
如果所有输出项都是最新的,MSBuild会跳过目标。这个 目标的增量构建可以显着改善构建 速度。如果只有一些文件是最新的,MSBuild将执行目标 但跳过最新的项目,从而带来所有项目 最新。这称为部分增量构建。
根据输出日志“ Project'company.xxx'不是最新的。输出文件'c:... \ company.yyy.dll'在输出文件'c:... \ company.yyy.pdb'后被修改,你应该修改项目company.yyy构建解决方案,在此修改之后,需要根据Incremental Builds重新构建company.yyy.dll。另外,Company.xxx引用company.yyy项目,因此company.yyy.dll将用作company.xxx项目的输入文件,输入文件已被修改,项目company.xxx将被重新构建。
由于对参考项目company.yyy 的修改,将重新构建company.xxx,尽管它们直接对company.xxx项目没有任何修改。