项目文件中有一些属性几乎是专门为 IDE 而准备的,不过考虑到 .NET 生态的开发者多数都使用 Visual Studio,所以基本上也只有 Visual Studio 对这些特性支持的最全面。(才不会透漏这些属性其实本就是为 Visual Studio 而准备的呢。)

本文将介绍如何在 Visual Studio 的解决方案资源管理器中隐藏一些文件。


本文内容

  • 原生支持
  • 原生不支持
  • 变通解决
  • 活学活用

原生支持

Visual Studio 原生支持 Visible 属性用来控制某一项文件是否在 Visual Studio 的解决方案资源管理器中显示。具体来说,是这样设置的:

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFramework>netcoreapp2.1</TargetFramework><EnableDefaultItems>false</EnableDefaultItems></PropertyGroup><ItemGroup><Compile Include="**\*.cs" Exclude="obj\**\*.cs" Visible="false" /></ItemGroup>
</Project>

好了,任务完成,全文结束!

要是只有这样,我才不会写这篇文章呢!

原生不支持

考虑一下像上图那样有些文件在文件夹中的情况,然后我们再次设置 Visible="false" 属性:

文件夹竟然还在!这是 Visual Studio 的 Bug 吗?

还真是,至少在 Visual Studio 的项目系统中就有这样的 Issue 处于打开的状态:

  • Content Visible=false hides the item, but not the directories in Solution Explorer · Issue #162 · Microsoft/VSProjectSystem

回复是:

Yes this is a known issue. We are discussing options to resolve it over here dotnet/roslyn-project-system#1233

好吧,那就等着解决吧!不过等大家的 Visual Studio 更新到解决的版本还需要很久吧。

变通解决

所以,我们只好采取其他手段来解决,最容易想到的是编写一个 <Target />

<Target Name="IncludeSourceCodes" BeforeTargets="CoreCompile"><ItemGroup><Compile Include="**\*.cs" Exclude="bin\**\*.cs;obj\**\*.cs;" /></ItemGroup>
</Target>

这样,引入这些文件就是通过在编译时才引入的。没有开始编译时,项目中自然看不见。

如果这样的例子发生在制作的 NuGet 包中,那么这个文件可能在 NuGet 包中的路径是 /build/Walterlv.Demo.targets;为了引用额外的源码,我们可以加上额外的路径信息:

<Target Name="IncludeSourceCodes" BeforeTargets="CoreCompile"><ItemGroup><Compile Include="$(MSBuildThisFileDirectory)..\src\**\*.cs" Exclude="$(MSBuildThisFileDirectory)..\src\bin\**\*.cs;$(MSBuildThisFileDirectory)..\src\obj\**\*.cs;" /></ItemGroup>
</Target>

活学活用

这并不是说在 Visual Studio 的解决方案资源管理器中,隐藏文件都应该采用 <Target /> 来做,毕竟这样太复杂了。如果没有太复杂的要求,直接些 Visible="false" 也未尝不可。

比较复杂的情况可能比如:

  • 制作跨平台的 NuGet 源码包,安装后就像直接把源码放进项目一样
  • 需要额外为项目准备一些辅助运行的必要文件

参考资料

  • Content Visible=false hides the item, but not the directories in Solution Explorer · Issue #162 · Microsoft/VSProjectSystem

我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

在 Visual Studio 的解决方案资源管理器中隐藏一些文件相关推荐

  1. Visual Studio 2015 解决方案资源管理器

    位置 解决方案资源管理器 窗口默认位于右上角. 它与另一个窗口 类视图 位于相同的位置. 打开 类视图 可以在菜单栏中选择 视图 | 类视图 即可打开该窗口.如下图: 解决方案管理器 窗口显示了组成 ...

  2. 扩展Visual Studio 2010服务器资源管理器中的SharePoint结点

    Visual Studio 2010最大的卖点就是可扩展性.这样就可以借助.NET社区的力量基于VS构建出许多有用的工具.本文中我们将展示如何扩展VS2010的服务器资源管理器,在其中的SharePo ...

  3. 解决方案资源管理器中没有头文件源文件

    转自:http://blog.csdn.net/wsj998689aa/article/details/40051287 我们操作VS的时候,正常情况下,解决方案窗口中,项目内文件的布局如下: 可是, ...

  4. “解决方案资源管理器”中不能自动选择正在编辑的文档

    本来正在编辑的文档应该在"解决方案资源管理器"中自动选中的,但是我的VS2005机器好像没有这个功能,后来发现 "工具->选贤"里边的"项目和解 ...

  5. 签入在服务器上之后,别人获取了,在解决方案资源管理器中找不到。

    签入在服务器上之后,别人获取了,在解决方案资源管理器中找不到. 这个问题具体原因我也不太清楚,但是我找到了一个解决方案.直接在解决方案上右键,添加,添加现有项.把在解决方案资源管理器上看不见的选中,添 ...

  6. 已有文件夹添加到ASP.NET解决方案资源管理器中

    我有点不习惯用vs来码h5代码,所以把c#代码用vs写,h5代码用vs code写,现在发现一个问题,我在项目目录中自己创建的文件夹.css.html等页面没有在vs的解决方案资源管理器中显示出来,这 ...

  7. visual studio 里面解决方案资源管理器界面不见了,应该如何显示出来?并且如何将其从右边更改到左边

    1.打开visual studio 软件 出现的界面没有[解决方案资源管理器界面],如下图所示: 2.点击顶部的[视图]菜单,如下图所示: 3.打开[视图]后,会出现[解决方案资源管理器],点击一下即 ...

  8. Visual Stdio的解决方案资源管理器位置调整

    其实这是个极为简单的操作,可是我最初真的不会弄,哈哈,自嘲一下. 我刚装了vs2013,这个解决方案资源管理器默认靠右了,习惯了靠左,那么咋搞呢? 方法有三种: 方法一:窗口-->重置窗口布局 ...

  9. python资源管理器选择文件_Python:在资源管理器中获取选定文件的列表(windows7)...

    我知道现在在这里发布答案有点晚了,但我几个月前尝试过Olav的解决方案,但它没有完全起作用:工作目录是脚本的工作目录,所以我不得不删除if条件才能使其工作,但它选择了所有Windows资源管理器窗口中 ...

最新文章

  1. linux 安装 nodejs
  2. mysql 平均响应时间_Percona-Server/MySQL响应时间统计
  3. 计算机组成原理(哈工大刘宏伟)135讲(二)
  4. 微信开发系列之二 - 在微信公众号里开发一个自动应答的图灵机器人
  5. 亚信联创java面试题_亚信联创面试题及答案
  6. Oracle 中文排序
  7. syntaxhighlighter 代码高亮 - 插件化
  8. 为什么写了value属性 jq赋值value值不显示_为什么 String 要设计成 final,又如何设计一个不可变类呢?...
  9. Delphi 2010手动安装indy10.5.7
  10. Ubuntu安装Monaco字体
  11. Matlab 三角函数(sin)
  12. AMADA阿玛达触摸屏维修折弯机主机维修
  13. oracle查询某个时间段的数据
  14. Matlab论文插图绘制模板第28期—柱状图(带误差棒errorbar)
  15. 基于Linux centos7 搭建内网服务器,并通过外网访问
  16. Java可变参数的基本使用
  17. 第十一家面试(堆糖)
  18. 开源版本_开源绘画应用 Pinta 在 5 年后迎来新版本 | Linux 中国
  19. 面试题:1、H5+css
  20. matlab中函数imresize的使用介绍

热门文章

  1. 黄飞宏老师---沪师经纪刘建
  2. 网络运维(Python自动化运维)考点
  3. VIM / .vimrc
  4. struts2框架详解
  5. 二进制免杀-火绒免杀研究
  6. 《随机漫步的傻瓜》---寻找你的投资原则,查理芒格说:当成功概率很高的时刻,下最大的赌注,其余时间按兵不动...
  7. jquery中append、prepend、before、after方法使用
  8. Android之SeekBar的简单使用
  9. 杰理之ANC控制【篇】
  10. ug安装出现中文用户名怎么解决?ug安装中文目录报警ug安装中文名ug安装中文路径