Msbuild 查找msbuld属性的来源

Msbuild 查找msbuld属性的来源,msbuild,Msbuild,如果已经有人问过这个问题,我很抱歉,但我真的不能回答这样的问题 我必须为一个非常大的项目做出贡献,有很多包含和有条件的任务。我想知道它被设置在哪里 更具体地说,对于一个属性名称,我希望在日志中看到它被分配的所有位置:项目文件、系统中包含的文件、内置默认值、任何其他源 我已尝试启用verbosity=diagnostic,但它仍然没有记录此信息。/v:diag将在控制台日志的开头转储所有属性值,而不是文件日志,但不会告诉您它们来自何处,即项目、导入、环境、命令行参数等。请改为运行msbuild F

如果已经有人问过这个问题,我很抱歉,但我真的不能回答这样的问题

我必须为一个非常大的项目做出贡献,有很多包含和有条件的任务。我想知道它被设置在哪里

更具体地说,对于一个属性名称,我希望在日志中看到它被分配的所有位置:项目文件、系统中包含的文件、内置默认值、任何其他源


我已尝试启用verbosity=diagnostic,但它仍然没有记录此信息。

/v:diag将在控制台日志的开头转储所有属性值,而不是文件日志,但不会告诉您它们来自何处,即项目、导入、环境、命令行参数等。请改为运行msbuild Foo.csproj/pp:Foo.pp.csproj,这将解决所有导入问题,您可以阅读.pp.csproj文件来查找您的属性,上面的注释将告诉您导入的项目定义了什么及其位置。

我喜欢使用/preprocess:flatten.proj展平项目,然后将其加载到文本编辑器中并搜索所有用途等

程序MSBuildExplorer3将提供一个图表,显示属性和用于设置属性的表达式等。我没有太多使用它,但这看起来很有趣


理解评估的顺序也很重要。全局属性是按照在展开文件中找到它们的顺序设置的,但在运行目标之前,不会执行目标内部的属性。然后,如果目标内部的任务行是批处理的,但目标本身不是,那么目标是一次性完成还是批处理的,属性只设置了一次可能会让人困惑,但它似乎被多次调用

如果没有其他答案,唯一的解决方案可能是逐步调试msbuild进程:对于msbuild 12.0 Microsoft R Build Engine版本12.0.30501.0和vs2013 update 2,我在源调试器中看不到项目本身,所以这是一个相当具有挑战性的利用它。谢谢,我能够解决我的问题。尽管调试由于某些原因无法工作,但我有一个非常类似的正确项目,通过比较,我找到了应该定义它的位置。感谢您参考MSBuildExplorer3。它的用户界面很难使用,但由于它是开源的,我在文件中添加了日志,我可以看到它找到了分配的位置。听起来是一个很好的改进。我发现显示的文本很小,有别名问题,就像读一份污迹斑斑的报纸。