我正在处理一个需要设置名为$(LibPath)
的属性的项目。该值应由插件设置,但它保存在projectname.vcxproj.user
文件中。当有人删除此文件(例如通过git clean
)或某个新项目开始时,这是一个问题。
为了拥有默认值,我创建了一个属性表,该表位于最顶层的项目文件中。
<PropertyGroup Label="UserMacros">
<LibPath Condition="'$(LibPath)' == ''">PathToLib</LibPath>
</PropertyGroup>
<ItemGroup>
<BuildMacro Include="LibPath">
<Value>$(LibPath)</Value>
</BuildMacro>
</ItemGroup>
现在适用于路径与默认路径匹配的所有人。如果没有,他们可以通过转到物业管理器来改变VS内部 - &gt;属性表文件 - &gt;用户宏。
现在剩下的问题是,当此路径不匹配且需要更改时,Propety Sheet中的值也会更改。
所以我的问题:有没有办法定义一个可以在VS中编辑的属性,然后将其保存在vcxproj.user
文件中(或任何其他用户特定的文件)覆盖默认值的文件)?
答案 0 :(得分:1)
有没有办法定义一个可以在VS中编辑的属性,该属性保存在vcxproj.user文件中?
AFAIK,我担心当该路径不匹配时,您无法在Visual Studio中编辑已定义属性的原因是 vcxproj.user文件是在比Propety Sheet 之后导入的。< / p>
如果我们创建一个属性表,我们将在项目文件中获得以下导入文件TestSheet.props
:
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="TestSheet.props" />
</ImportGroup>
通过以下导入导入vcxproj.user
文件:
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
此文件位于项目文件中的TestSheet.props
下:
在这种情况下,MSBuild将使用vcxproj.user文件中的$(LibPath)
值替换propety表中的值。因此,它仅适用于路径与默认值匹配的所有人,如果您通过转到Property Manager更改值 - &gt;属性表文件 - &gt;用户宏,该值将被下一个导入文件Microsoft.Cpp.targets
覆盖。
要解决此问题,您可以对项目文件中的所有<Import Project="TestSheet.props" />
行进行注释,并在导入Microsoft.Cpp.targets
文件后添加此行:
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<Import Project="TestSheet.props" />
使用此设置,如果更改用户宏中的值,此值将覆盖vcxproj.user
文件中的值。