问题描述
我的解决方案有两个项目:c ++ dll和c#web。 DLL项目具有预建事件,例如
IF 2 == 1
(
echo ERROR: Dll building error
)
而且,显然,如果我为dll项目运行该条件,则此条件不会中断构建过程,并且可以成功完成。
但是.. Web项目依赖于dll,因此,在其自己的预生成事件中,依次通过MSBUILD.exe命令对其进行启动。因此,结果是,预构建父级(对于Web为MSBUILD),后跟嵌套的预构建子级(对于DLL为IF)。 。而且,如果我尝试构建Web项目,则MSBUILD.exe子DLL项目(在Web预构建事件中)发生错误后,会中断消息 Dll生成错误(来自DLL项目预构建事件)。 成功构建!-结果dll文件已出现在输出目录中!。
是什么意思?子级构建前事件条件错误地中断了父级构建过程?
解决方法
问题似乎是您滥用MSBuild。处理“子项目”的正确方法是使用解决方案。在此解决方案中,您既有项目,又有来自DLL的Web项目的项目依赖项。您构建解决方案,这就是一个MSBuild命令。因此,C#Web项目不需要启动另一个MSBuild命令。
MSBuild在使用解决方案文件时,会看到真正的依存关系并正确处理构建失败。请注意,预构建事件中的“ echo ERROR”只是屏幕上的文本,而不是构建失败。 You'll need to exit /b 1
the pre-build step to stop the build