我似乎无法找到Microsoft提供的任何有用的文档,说明在定义时如何使用Delimiter
元素中的InheritsFromParent
和UserMacro
属性用户Visual Studio中.vsprops
属性表文件中的宏。
以下是示例用法:
<UserMacro Name="INCLUDEPATH" Value="$(VCROOT)\Inc"
InheritsFromParent="TRUE" Delimiter=";"/>
从上面的例子中,我猜测“inherit”实际上意味着“a)如果定义是非空的,那么追加分隔符,b)附加新定义”其中非继承行为将简单地替换任何当前的宏定义。有人有确切消息么?更好的是,是否有人为Visual Studio .vsprops
文件和宏提供了任何建议的替代文档来源?
注意:不与InheritedPropertySheets
元素的VisualStudioPropertySheet
属性相同,例如:
<VisualStudioPropertySheet ... InheritedPropertySheets=".\my.vsprops">
在这种情况下,“inherit”基本上意味着“include”。
答案 0 :(得分:9)
[回答我自己的问题]
InheritsFromParent
表示前置。为了验证这一点,我做了一个实验,揭示了用户宏在Visual Studio 2008中的工作方式。以下是设置:
p.vcproj
使用d.vsprops
标记包含属性表文件InheritedPropertySheets
(派生的'd')。d.vsprops
包含属性表文件b.vsprops
( base 的'b'。)p.vcproj
还定义了一个转储环境的预构建事件。.vsprops
文件都包含用户宏定义。<强> b.vsprops 强>
...
<UserMacro Name="NOENV" Value="B"/>
<UserMacro Name="OVERRIDE" Value="B" PerformEnvironmentSet="true"/>
<UserMacro Name="PREPEND" Value="B" PerformEnvironmentSet="true"/>
...
<强> d.vsprops 强>
...
<VisualStudioPropertySheet ... InheritedPropertySheets=".\b.vsprops">
<UserMacro Name="ENV" Value="$(NOENV)" PerformEnvironmentSet="true"/>
<UserMacro Name="OVERRIDE" Value="D" PerformEnvironmentSet="true"/>
<UserMacro Name="PREPEND" Value="D" InheritsFromParent="true"
Delimiter="+" PerformEnvironmentSet="true"/>
...
<强> p.vcproj 强>
...
<Configuration ... InheritedPropertySheets=".\d.vsprops">
<Tool Name="VCPreBuildEventTool" CommandLine="set | sort"/>
...
构建输出
...
ENV=B
OVERRIDE=D
PREPEND=D+B
...
从这些结果我们可以得出以下结论:
PerformEnvironmentSet="true"
是在用于构建事件的环境中定义用户宏所必需的。证明:NOENV
未在构建输出中显示。PerformEnvironmentSet
还是InheritsFromParent
。证明:在b.vsprops
中,NOENV
未在环境中设置,在d.vsprops
中使用它而不需要InheritsFromParent
。OVERRIDE
设置为D
,但之前已定义为B
。InheritsFromParent="true"
重新定义用户宏 将新定义添加到之前的任何定义中,并由指定的Delimiter
分隔。证明:PREPEND
设置为D+B
(不是D
或B+D
。)以下是我发现的一些其他资源,用于解释Visual Studio .vsprops
文件和相关主题,这些资源来自几年前,但它仍然有用:
understanding the VC project system part I: files and tools
understanding the VC project system part II: configurations and the project property pages dialog
understanding the VC project system part III: macros, environment variables and sharing
understanding the VC project system part IV: properties and property inheritance
understanding the VC project system part V: building, tools and dependencies
understanding the VC project system part VI: custom build steps and build events
understanding the VC project system part VII: "makefile" projects and (re-)using environments
答案 1 :(得分:0)
有关此here的UI版本的文档。 很多XML文件似乎都没有记录,通常只给出schema file。你对它们如何运作的猜测是非常正确的。
答案 2 :(得分:0)
这不是全部故事。