Visual studio 2013 Visual Studio C+;中未显示动态包含的文件+;至少创建一个筛选器后的2013解决方案资源管理器 介绍 在我们的项目中,VisualStudioC++被用作代码编辑器,而构建被委托给支持多个目标平台的基于GNU的构建系统。从VisualStudio到生成系统的生成委派由通用MSBuild属性表实现,该属性表包含在每个VS项目文件中。(集成基本上通过设置大量特定于NMake的属性来工作,例如NMakeBuildCommandLine等)。通用集成属性表的附加工作是将特定于项目的资源文件动态添加到解决方案资源管理器中的项目子树中
在VisualStudio2010和VisualStudio2012中,动态添加特定于项目的资源文件多年来一直运行良好。不幸的是,该功能在Visual Studio 2013中已停止工作 初始设置 下面的简化示例演示了该问题。我们的最小设置由以下5个文件组成:Visual studio 2013 Visual Studio C+;中未显示动态包含的文件+;至少创建一个筛选器后的2013解决方案资源管理器 介绍 在我们的项目中,VisualStudioC++被用作代码编辑器,而构建被委托给支持多个目标平台的基于GNU的构建系统。从VisualStudio到生成系统的生成委派由通用MSBuild属性表实现,该属性表包含在每个VS项目文件中。(集成基本上通过设置大量特定于NMake的属性来工作,例如NMakeBuildCommandLine等)。通用集成属性表的附加工作是将特定于项目的资源文件动态添加到解决方案资源管理器中的项目子树中,visual-studio-2013,filter,msbuild,visual-studio-project,Visual Studio 2013,Filter,Msbuild,Visual Studio Project,在VisualStudio2010和VisualStudio2012中,动态添加特定于项目的资源文件多年来一直运行良好。不幸的是,该功能在Visual Studio 2013中已停止工作 初始设置 下面的简化示例演示了该问题。我们的最小设置由以下5个文件组成: minimal_sample.sln:解决方案文件,由VS 2010创建,参考项目的版本| Win32配置已删除(单击查看代码列表) minimal_sample.vcxproj:项目文件,请参阅下面的详细说明(单击以查看代码列表) 代码
minimal_sample.sln
:解决方案文件,由VS 2010创建,参考项目的版本| Win32
配置已删除(单击查看代码列表)minimal_sample.vcxproj
:项目文件,请参阅下面的详细说明(单击以查看代码列表)text\u file.txt
:最小示例资源文件(内容无关)- 已删除
配置Release | Win32
- 使用VS 2010添加静态包含的文件(该部分由
和静态文件包含代码开始
XML注释分隔)静态文件包含代码结束
- 添加了负责添加动态资源文件的MSBuild代码部分(该部分由
和动态文件包含代码的开头
XML注释分隔)动态文件包含代码的结尾
minimal_sample.vcxproj
文件的相关部分:
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Project file parts left out for brevity -->
<ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<!-- Start of dynamic file inclusion code -->
<PropertyGroup>
<TxtFile Condition="'$(TxtFile)'==''">text_file.txt</TxtFile>
</PropertyGroup>
<ItemGroup Condition="'$(TxtFile)'!='' and exists('$(TxtFile)')">
<None Include="$(TxtFile)"/>
</ItemGroup>
<!-- End of dynamic file inclusion code -->
<PropertyGroup Label="UserMacros" />
<!-- Project file parts left out for brevity -->
<!-- Start of static file inclusion code -->
<ItemGroup>
<ClCompile Include="statically_included_header.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="statically_included_impl.cpp" />
</ItemGroup>
<!-- End of static file inclusion code -->
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
text_file.txt
复制的手动步骤
只要不使用过滤器,上面描述的最小示例在本文提到的任何Visual Studio版本中都不会出现问题,即:VS 2010、VS 2012和VS 2013
一旦将筛选器添加到minimal_sample.vcxproj
——无论它是空筛选器、静态包含文件的筛选器还是动态包含的资源文件text_file.txt
——重新启动后,动态包含的资源文件都会隐藏在Visual Studio 2013中(或在卸载项目/重新加载项目序列之后)。但是,该文件在Visual Studio 2010和Visual Studio 2012中仍然可见
一旦删除minimal_sample.vcxproj.filters
文件,过滤器就会被删除,但动态包含的资源文件text_file.txt
将再次可见
问题
我通常使用csproj,所以我不记得文件过滤器,但关于这个文件过滤器或不过滤器的内容…为什么要使用属性动态添加文件?不仅仅是项目?如果“使用文件”,应该使用ItemGroup@Carnifex我同意None项的定义(通过TxtFile属性)看起来有点做作。但是,在这种情况下,这是很重要的,因为这就是在原始属性表中最终设置None项的方式(请记住,我在这里提供了一个非常精简的示例)。必须首先通过一系列条件评估动态计算类似于TxtFile的属性值。