我有许多解决方案,其中包含大量项目。我希望能够为所有项目使用的解决方案定义全局设置。例如,包含目录。我希望能够在一个地方为解决方案中的所有项目更改include目录。
当我搜索解决方案时,我找到了matches mine exactly问题的良好描述,但解决方案建议在那里,项目属性表是按项目而不是每个解决方案定义的。
我可以使用环境变量或Visual Studio设置,但是那些需要编译代码的人必须定义完全相同的设置。
有人可以建议一种方法吗?感谢。
答案 0 :(得分:15)
我们使用属性表来完成此任务。可以将单个属性表分配给解决方案中的所有项目。从那时起,您可以更改该属性表中的设置,它将影响所有项目。
高级提示:我们实际上使用了多个属性表(例如,一个用于发布目标类型,一个用于调试目标类型)。小费是订单非常重要。如果您手动编辑项目文件,则最后一个属性表将覆盖列表中先前属性表中的设置。如果您在GUI中进行编辑,则TOP将覆盖其下方的那些。
答案 1 :(得分:2)
正如其他人所建议的,物业单可以做你想要的。诀窍是使用InheritedPropertySheets
,就像在C ++中使用#include
一样。注意:项目文件和属性表文件的XML略有不同。这是两个项目(prjA.vcproj
和prjB.vcproj
)的设计和简化示例,包括相同的属性表(sln.vsprops
),其本身包含另一个(strict.vsprops
):
<强> strict.vsprops 强>
<VisualStudioPropertySheet ...>
<Tool Name="VCCLCompilerTool" WarningLevel="3" WarnAsError="true"/>
</VisualStudioPropertySheet>
<强> sln.vsprops 强>
<VisualStudioPropertySheet ... InheritedPropertySheets=".\strict.vsprops">
<Tool
Name="VCCLCompilerTool"
PreprocessorDefinitions="NOMINMAX=1"
RuntimeTypeInfo="true"
/>
</VisualStudioPropertySheet>
<强> prjA.vcproj 强>
<VisualStudioProject ...>
<Configurations>
<Configuration ... InheritedPropertySheets=".\sln.vsprops">
</Configuration>
</Configurations>
...
</VisualStudioProject>
<强> prjB.vcproj 强>
<VisualStudioProject ...>
<Configurations>
<Configuration ... InheritedPropertySheets=".\sln.vsprops">
</Configuration>
</Configurations>
...
</VisualStudioProject>
您可能还会发现this question及其答案很有用。
答案 2 :(得分:1)
也许您可以将MSBuild文件添加到您定义了许多共享属性的解决方案中,然后将<Import>文件添加到所有真实项目中?
也就是说,在“设置”MSBuild文件中,您可以定义许多属性:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WinUnitIncludeDir>C:\Includes\WinUnit</WinUnitIncludeDir>
<!-- Other shared properties go here -->
</PropertyGroup>
</Project>
从您的真实项目中,您可以参考:
<Project ...>
...
<Import Project="path/to/settings.msbuild" />
...
<Configurations>
<Configuration ...>
<Tool Name="VCCLCompilerTool"
...
AdditionalIncludeDirectories="$(WinUnitIncludeDir)"
... />
...
...
...
</Project>
答案 3 :(得分:1)
根据建议,您应该查看Property Sheets(又名.vsprops文件) 我写了一篇关于此功能的简短介绍here。
答案 4 :(得分:0)
前段时间我搜索的内容完全相同,但未找到我想要的内容。
唯一可能接近此功能的是Property Sheets。这不完全是全球性的,因为它由项目拥有并被其他人使用。