【问题标题】:Is there a way to set certain MSbuild General rule properties for all project configurations in a .props file?有没有办法为 .props 文件中的所有项目配置设置某些 MSbuild General 规则属性?
【发布时间】:2021-12-22 00:31:30
【问题描述】:

我正在尝试通过项目的 .props 文件为我的 Visual Studio 项目的所有配置设置默认属性值,例如 Configuration Type,但它们没有被应用。我可以通过 .props 文件成功设置 Intermediate Directory 等其他常规属性的值。以 Configuration Type 属性为例,我还可以在每个配置的基础上修改 .vcxproj 文件中的这个属性(在使用条件指定配置的 PropertyGroup 下设置属性) .

在 Visual Studio 中查看 .props 文件的属性页时,我怀疑我无法为所有配置设置某些属性,因为没有相应的设置。 Property page for the projectProperty page for the .props file。我也试过手动编辑 .props 文件来添加这个属性,但它没有被应用:

<ConfigurationType>StaticLibrary</ConfigurationType>

添加上述行并将 Visual Studio 中的属性值设置为 后,它仍然默认为 Application (.exe)。

有没有办法为项目中的所有配置设置这些属性,以便每个单独的配置不必在 .vcxproj 文件中单独指定这些属性?

【问题讨论】:

  • '它仍然默认为应用程序 (.exe)。'虽然在 UI 中,但它是否也构建了一个 .exe?我的意思是可以在属性表中指定它,但是 VS 可能会忽略它,而 msbuild 会使用它。
  • 是的,然后它会尝试构建一个 .exe。我可以在 .vcxproj 中查看,其对应的属性组已更改。我想这个问题可以改写为问我是否可以让项目或配置将配置属性默认为 StaticLibrary。

标签: visual-studio msbuild


【解决方案1】:

问题在于评估事物的顺序。如果您制作了一个设置 ConfigurationType 的 .props,则需要在 &lt;Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /&gt; 行之前导入它。 VS 仍然会忽略它,显示带有配置标签的 PropertyGroup 中配置的任何内容,但它会改变构建的内容。

这不是很好,并且表明这也不是你应该做的事情,所以你可以做的是修改 .vcxproj 的这一部分:

<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

<Import Project="my.props" Condition="Exists('my.props')" />
<!-- Supply default in case property sheet not found
     and if not passed via /p:MyConfigurationType=xxx or similar -->
<PropertyGroup>
  <MyConfigurationType Condition="'$(MyConfigurationType)' == ''">StaticLibrary</MyConfigurationType>
</PropertyGroup>

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
  <ConfigurationType>$(MyConfigurationType)</ConfigurationType>
</PropertyGroup>

我不确定这是否值得。通常,如果您想更改配置类型,请选择不同的配置/平台组合。实际选择的类型通常每个项目只更改一次,上面的工作量更大。

【讨论】:

  • 感谢您的详细解释。我同意这可能不值得。另一种解决方案是克隆 $(VCTargetsPath)\Microsoft.Cpp.Default.props,编辑默认值,然后在 .vcxproj 中导入这个新的 .props 文件吗?
  • 这与导入 my.props 的原理几乎相同:假设您这样做,.vcxproj (默认情况下)仍然会有那些带有Label="Configuration" 的 PropertyGroups,这是 VS 使用的UI 并将覆盖 Microsoft.Cpp.Default.props 中的任何内容,除非您还手动修改它。您可以做的是克隆或修改默认的 C++ 项目模板(即您为 File->New Project 获得的模板),然后让它们默认使用 StaticLibrary。
  • 好的,接下来应该有足够的信息了。再次感谢您的帮助!
  • 嗨@ArmaanBandali,请不要忘记accept the useful answer,这将有利于其他会员,祝您有美好的一天:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
  • 2018-10-07
  • 1970-01-01
  • 2019-05-04
  • 2012-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多