在创建自定义Microsoft.Build.Utilities.Task的上下文中,如何访问MSBuild详细信息?
Microsoft.Build.Utilities.Task:http://msdn.microsoft.com/en-us/library/microsoft.build.utilities.task.aspx
答案 0 :(得分:1)
我不认为它的运作方式。您可以通过Task.BuildEngine属性获得对构建引擎的引用。然后只需调用其LogMessageEvent即可生成消息。 BuildMessageEventArgs.Importance根据详细程度设置确定消息是否实际可见。这与其他日志记录API一致。
答案 1 :(得分:0)
设计决策背后的原因(构建无法看到详细程度)如下:
(1)构建过程不应该假设用户(以及她选择的记录器)想要什么。它们不一定归同一个人所有。考虑走到一个任务知道详细程度的构建,只记录诊断详细程度的某些信息。您希望在控制台上建立安静的详细程度,但还要附加一个记录绝对所有内容的数据库记录器。你不能,因为任务从未解雇过这个事件,因为它看到了安静的冗长。
(2)重要性和详细程度会混淆。重要性是构建过程的暗示,即具有特定详细程度的记录器可能想要对事件做什么。它们存在于不同的领域:任务和构建过程中的重要性,仅在记录器中的详细程度。
(3)详细程度本身(例如,/ verbosity)只是一个默认值。记录器通常允许您为它们指定特定的详细程度。例如/ fileloggerparameters:verbosity = detailed。任务应该由哪个来完成?可能有几个。
话虽如此,回想起来有一个很好的理由重新审视这个问题。这是因为在Log对象上触发大量事件(您可能合理地进行诊断)可能会显着影响构建性能,即使在较低的冗余情况下,它们也会被记录器丢弃。为了解决这个问题,我们应该允许构建过程至少知道它是否处于某种“超级详细”模式,在这种情况下可以像疯了一样安全地记录。
此外,最重要的是完成工作。所以,所有这些细节都可能过于复杂。
Dan - 多年前我帮助设计了这个。