And*_*sev 14 c++ msbuild visual-c++
我ProjectReference
在MSBuild项目中找不到有关标记的文档.我在哪里可以阅读它的详细说明?
编辑:
我有一个.vcxproj
由他人创建.它包含ProjectReference
项目.ProjectReference
包含子标签:Private
,ReferenceOutputAssembly
,CopyLocalSatelliteAssemblies
,LinkLibraryDependencies
,UseLibraryDependencyInputs
.我在哪里可以阅读这些标签?它们可以包含哪些值?还有哪些子标签可以ProjectReference
包含?
我在MSDN和谷歌搜索过但没有找到文档页面,只有关于其他产品的讨论和文档,而不是MSBuild.
您会注意到 ProjectReference 元素是 ItemGroup 元素的子元素。
谢天谢地,ItemGroups 是一个完整记录的架构项目。你会发现 ItemGroups 的子元素可以是任何东西。将其视为集合的名称。ItemGroup 中的该项目可以具有“元数据”值。
例如,
<ItemGroup>
<WindowsFiles Include="C:\Windows\*">
<IsSystem>true</IsSystem>
</WindowsFiles>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
这定义了一个名为 WindowsFiles 的项目组。它本质上变成了与 Include 属性匹配的文件集合。所有项目组项目都有内置的元数据 - 例如文件名、扩展名、完整路径、目录等,但您可以添加自己的 - 在这种情况下 IsSystem 是一个额外的。
通过以下两种方式之一来引用项目组:
<Message Text="%(WindowsFiles.FullPath)"/>
<Message Text="@(WindowsFiles->'%(FullPath)')"/>
Run Code Online (Sandbox Code Playgroud)
后者被称为更高级的变换。最好坚持使用前者,直到您了解 ItemGroups 或转换不会进入。
您感兴趣的 ProjectReference 项组将由某个目标文件处理。由于项目组的名称相当随意,因此从概念上讲,它们是变量,因此定义用途的目标文件如何处理它们。
按您的方式向上导入导入语句中提到的文件,以查看使用 ProjectReference 项组的位置。
从Jason Pyeron在评论中提供的MSBuild源代码链接开始,我了解到,当MSBuild准备构建依赖项时,它包括每个项目的所有项目元数据(您称为子标签)ProjectReference
。结果,下游任务和目标可以并且有时确实读取任意ProjectReference
元数据。
对于有关C ++项目的问题的答案,您可以检查Microsoft.CppBuild.targets
和Microsoft.CppCommon.targets
(其与Visual Studio 2015一致的MSBuild 14中的默认路径是C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\
)。但是,如下面的示例所示,这样做并不简单:
Microsoft.CppBuild.targets
,目标动态ResolvedXDCMake
创建_ResolvedNativeProjectReferencePaths
项目。ComputeReferenceLinkInputs
创建ProjectReferenceToLink
项目。CopyLocal
元数据的项目,相同的目标将其添加,复制任何Private
元数据值。Link
动态创建一个项目。Microsoft.CppCommon.targets
,Link
项目将在Target中Task 的Sources
参数中传递!尽管很公平,但它们的元数据已在上一步中清除,因此在这种特殊情况下,您不必深入研究Target文档。Link
Link
Link
以下是与您的问题相关的其他部分:
参量
Include
(属性):项目文件的路径Project
(元数据):Project GUID,格式为{00000000-0000-0000-0000-000000000000}ReferenceOutputAssembly
(元数据):布尔值,指定是否应将引用的项目的输出传递给编译器。默认为true。SpecificVersion
(元数据):是否应使用程序集的确切版本。Targets
(元数据):在参考项目中应建立的目标的分号分隔列表。默认值是$(ProjectReferenceBuildTargets)
其默认值为空白的值,表示默认目标。OutputItemType
(元数据):向其发出目标输出的项目类型。默认为空。如果ReferenceOutputAssembly
设置为“ true”(默认),则目标输出将成为编译器的引用。EmbedInteropTypes
(元数据):可选布尔值。此参考中的类型是否需要嵌入到目标程序集中-仅互操作程序集备注
使用该OutputItemType
参数时,可能适用其他参数(元数据)。例如,当OutputItemType
设置为时Content
,CopyToOutputDirectory
可以使用:
Never
,Always
,PreserveNewest
。 归档时间: |
|
查看次数: |
9516 次 |
最近记录: |