我正在开发一个具有相当标准的Visual Studio 2013构建链的项目。解决方案中的一个项目仅用于将.hlsl文件编译为.cso文件,然后在运行时加载。从Visual Studio IDE中构建时,增量构建按预期运行;如果我编辑color_ps.hlsl只是将着色器编译成相应的.cso文件。
为了加速开发人员工作流程,我们有一个系统可以自动重新编译,然后在运行时重新加载着色器。基本上,如果应用程序正在运行并且用户编辑了color_ps.hlsl,我将从应用程序启动MSBuild以重建包含着色器的项目,然后重新加载其相应的.cso文件。这里的增量构建按预期工作。
这一切都非常有效,唯一的问题是似乎IDE和MSBuild之间似乎存在一些不兼容性。第一次在运行时使用MSBuild进行编译时,将重建项目中的所有.hlsl文件。进一步重新构建按预期使用增量构建。
此外,退出应用程序后,尝试从Visual Studio IDE中构建着色器项目也会触发完全重建。重新构建后,按预期使用增量构建。
我怀疑为什么会发生这种情况是IDE和MSBuild无法识别出他们的输出已经是最新的。为了澄清,通过IDE和MSBuild 编译生成的输出程序集是相同的,因此无论从何处调用构建,都应该将其识别为最新的。
当在IDE之间切换与在运行时调用MSBuild时,是否有人知道防止这些不必要的完全重建的方法?谢谢!