默认的特定于用户的属性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了默认的特定于用户的属性相关的知识,希望对你有一定的参考价值。

我正在开发一个需要设置名为$(LibPath)的属性的项目。此值应由插件设置,但它保存在projectname.vcxproj.user文件中。这是一个问题,当有人删除此文件(例如通过git clean)或从项目开始的新人。

为了有一个默认值,我创建了一个属性表,它被放在最顶层的项目文件中。

<PropertyGroup Label="UserMacros">
  <LibPath Condition="'$(LibPath)' == ''">PathToLib</LibPath>
</PropertyGroup>
<ItemGroup>
  <BuildMacro Include="LibPath">
    <Value>$(LibPath)</Value>
  </BuildMacro>
</ItemGroup>

它现在适用于路径与默认路径匹配的每个人。如果没有,他们可以通过转到Property Manager - > Properties Sheet file - > User Macros从VS中更改它。

现在剩下的问题是,当此路径不匹配且需要更改时,Propety Sheet中的值也会更改。

所以我的问题是:有没有办法定义一个可以在VS中编辑的属性,然后将其保存在vcxproj.user文件(或任何其他用户特定的文件中,它会覆盖默认值)?

答案

有没有办法定义一个可以在VS中编辑的属性,该属性保存在vcxproj.user文件中?

AFAIK,我担心当该路径不匹配时,无法在Visual Studio中编辑已定义属性的原因是vcxproj.user文件是在Propety Sheet之后导入的。

如果我们创建一个属性表,我们将在项目文件中获得以下导入文件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下:

enter image description here

在这种情况下,MSBuild将使用vcxproj.user文件中的$(LibPath)值替换propety表中的值。因此它仅适用于路径与默认值匹配的每个人,如果您通过转到Property Manager - > Properties Sheet file - > User Macros更改值,则该值将被下一个导入文件Microsoft.Cpp.targets覆盖。

要解决此问题,您可以在项目文件中注释所有<Import Project="TestSheet.props" />lines,并在导入Microsoft.Cpp.targets文件后添加此行:

<Import Project="$(VCTargetsPath)Microsoft.Cpp.targets" />
<Import Project="TestSheet.props" />

使用此设置,如果更改用户宏中的值,此值将覆盖vcxproj.user文件中的值。

以上是关于默认的特定于用户的属性的主要内容,如果未能解决你的问题,请参考以下文章

我的服务器设置正确的特定于语言环境的时区是不是重要? [复制]

特定版本为 False 时的特定于版本的程序集引用

针对 C++ 静态破坏/构造顺序问题的特定于平台的解决方法

带有 socket.io 的单页应用程序中的特定于部分的侦听器

spring boot 外部配置 - profile 特定配置

如何在 Vs Code 中更改默认自动选择的用户片段行为