具有多个属性表的 Visual Studio 2013 项目

Posted

技术标签:

【中文标题】具有多个属性表的 Visual Studio 2013 项目【英文标题】:Visual Studio 2013 Project with Multiple Property Sheets 【发布时间】:2016-01-19 00:06:37 【问题描述】:

我正在使用 Windows 10 上的 Visual Studio 2013 开发一个项目。基本上我正在使用 C++ 编写一些 MEX 文件,并且我正在使用一些我经常使用的库:OpenCV 和 MATLAB 的外部库。对于每个库,我都保存了包含所有必要信息的属性表(.props 文件)。它的要点是我正在尝试将我的 opencv.props 文件和我的 matlab.props 文件添加到项目中。

当我尝试将多个属性表添加到“属性管理器”中的属性配置时,出现了我当前的问题。对于每个,我单击“添加现有属性表”,瞧!我应该得到正确的设置。当我只使用一个属性表时,一切正常。当我尝试添加多张工作表时,似乎只有最近添加的内容正在注册。

知道我哪里出错了吗?

我已将 .props 文件的内容粘贴在下面,因为它们都非常简短:

matlab.props

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets" />
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup />
  <ItemDefinitionGroup>
    <ClCompile>
      <AdditionalIncludeDirectories>$(MATLAB_DIR)\extern\include</AdditionalIncludeDirectories>
    </ClCompile>
  </ItemDefinitionGroup>
  <ItemGroup />
</Project>

opencv.props

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets" />
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup>
    <_PropertySheetDisplayName>OpenCV_debug</_PropertySheetDisplayName>
  </PropertyGroup>
  <ItemDefinitionGroup>
    <ClCompile>
      <AdditionalIncludeDirectories>$(OPENCV_DIR)\..\..\include</AdditionalIncludeDirectories>
    </ClCompile>
    <Link>
      <AdditionalLibraryDirectories>$(OPENCV_DIR)\lib</AdditionalLibraryDirectories>
      <AdditionalDependencies>opencv_calib3d$(OPENCV_VERSION)d.lib;opencv_contrib$(OPENCV_VERSION)d.lib;opencv_core$(OPENCV_VERSION)d.lib;opencv_features2d$(OPENCV_VERSION)d.lib;opencv_flann$(OPENCV_VERSION)d.lib;opencv_gpu$(OPENCV_VERSION)d.lib;opencv_highgui$(OPENCV_VERSION)d.lib;opencv_imgproc$(OPENCV_VERSION)d.lib;opencv_legacy$(OPENCV_VERSION)d.lib;opencv_ml$(OPENCV_VERSION)d.lib;opencv_nonfree$(OPENCV_VERSION)d.lib;opencv_objdetect$(OPENCV_VERSION)d.lib;opencv_ocl$(OPENCV_VERSION)d.lib;opencv_photo$(OPENCV_VERSION)d.lib;opencv_stitching$(OPENCV_VERSION)d.lib;opencv_superres$(OPENCV_VERSION)d.lib;opencv_ts$(OPENCV_VERSION)d.lib;opencv_video$(OPENCV_VERSION)d.lib;opencv_videostab$(OPENCV_VERSION)d.lib;%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <ItemGroup />
</Project>

【问题讨论】:

您的属性表具有相同设置的竞争条目。可以在每个属性表中设置某些属性(例如附加库引用),而其他属性(例如字符集)则不能。仅指定特定于各个库的属性。 @IInspectable:谢谢!这就说得通了。我已将道具表添加到问题中。您能否快速浏览一下并告诉我哪些领域正在竞争(它们都很短)?在每种情况下,它只是设置了额外的库引用 嗯,显然&lt;AdditionalIncludeDirectories&gt; 在文件之间竞争,但我怎样才能避免这种情况呢? 未来的读者可能会发现这是一个有用的模板:github.com/chappjc/MATLAB/blob/master/propertySheets/… 【参考方案1】:

通常,属性表中的属性会覆盖先前设置的属性。要保留以前的设置,您必须显式添加它们(使用 %() 宏语法)。

例如,在你的 opencv.props 文件中你需要替换

<AdditionalIncludeDirectories>$(MATLAB_DIR)\extern\include</AdditionalIncludeDirectories>

<AdditionalIncludeDirectories>$(MATLAB_DIR)\extern\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

&lt;AdditionalLibraryDirectories&gt; 属性应用相同的更改; &lt;AdditionalDependencies&gt; 已经正确。

【讨论】:

以上是关于具有多个属性表的 Visual Studio 2013 项目的主要内容,如果未能解决你的问题,请参考以下文章

具有多个文件夹的 Visual Studio 项目

为多个项目和配置有效地使用 Visual Studio 项目属性

Azure Devops Visual Studio 测试任务无法发现具有 TestCaseSource 属性的 Nunit 测试

Emmet 扩展缩写在具有属性的 Visual Studio Code 中不起作用

如何在具有多个子项目的 Visual Studio 中为 C# 解决方案设置通用值(抽象)?

具有变量替换的 Visual Studio 2012 数据库部署