在VS中通过建立依赖关系使文件结构更清晰

在一个Web应用中,当你添加一个Web页面的时候,VS实际上会为你创建三个文件:Xxx.aspx, Xxx.aspx.cs和Xxx.aspx.designer.cs,后面两个文件(依赖文件)依赖于第一个文件(主文件)。依赖文件嵌套在主文件下,在结构上看起来非常的清晰。那么你是否可以把存在于同一个目录下的两个相关的文件也建立这种依赖关系呢?

目录 一、文件依赖达到的效果 二、文件依赖关系定义在Project文件中 三、通过VS插件建立两个文件之间的依赖关系

一、文件依赖达到的效果

对于项目文件之间的依赖关系,包含HTML的.aspx文件和包含Code Behind的.cs(或者.vb)文件是我们遇到的最为常见的表现形式。实际上还有其他的表现形式,比如资源文件(.resx文件)和自动生成的代码文件,Windows窗体文件和基于该窗体的资源文件(.resx)等。在创建这些文件的时候,VS会默认为你创建一套具有依赖关系的文件。

除了这种VS自动支持的文件依赖之外,有的时候我们需要手工为添加在同一个目录下的两个文件建立依赖关系。比如如果我们采用MVP模式进行开发的时候,建立一个View的时候,往往需要为之创建一个Presenter。在默认的情况下,View和Presenter在VS中处于同一个级别,如果能够建立起它们之间的依赖关系,让Presenter文件嵌套在View文件下,在结构上将显得更加清晰(如左图所示)。

再举一个例子,在《如何让ASP.NET默认的资源编程方式支持非.ResX资源存储》一文中,我提供了一种通过自定义ResourceProvider让ASP.NET默认的资源编成模式支持不同形式的资源存储形式。现在我们为了实现本地化的需要,需要为每一个.aspx创建基于不同语言文化的资源文件,假设我们采用XML文件。如果我们能够让这些资源文件作为.aspx文件的依赖文件,那么它们显示在Solution Explorer中就会呈现出一种层级关系,看起来会显得结构清晰(如右图所示)。

具有依赖关系的文件之间除了显示效果之外还具有一些额外的属性,比如当你删除主文件的时候,所有的依赖文件都会自动被删除;当你使用TFS作为Source Control的时候,签出主文件的同时也会将所有依赖文件全部签出。

二、文件依赖关系定义在Project文件中

在目录结构来讲,主文件和依赖文件处于相同的层级,它们的依赖关系实际上是通过Project文件(.csproj文件或者.vbproj文件)来定义的。Project文件本质上就是一个XML文件,所有包含在项目中的文件在<ItemGroup>元素下具有一个子元素。一般来说,需要编译的文件(比如.cs或者.vb文件)以一个<Compile/>元素表示,其它的则表示成<Content/>元素。而某个文件具体依赖于哪个文件,通过子元素<DependentUpon/>定义。比如说针对上图所示的文件结构,三个资源文件(Default.aspx.xml、Default.aspx.en-US.xml和Default.aspx.zh-CN.xml)以来于Default.aspx,这样的依赖关系体现在如下所示的Project文件中。

   1: <?xml version="1.0" encoding="utf-8"?>
   2: <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   3:   <!--Other Content-->
   4:   <ItemGroup>
   5:     <Content Include="Default.aspx" />
   6:     <Content Include="Default.aspx.xml">
   7:       <DependentUpon>Default.aspx</DependentUpon>
   8:     </Content>
   9:     <Content Include="Default.aspx.en-US.xml">
  10:       <DependentUpon>Default.aspx</DependentUpon>
  11:     </Content>
  12:     <Content Include="Default.aspx.zh-CN.xml">
  13:       <DependentUpon>Default.aspx</DependentUpon>
  14:     </Content>
  15:   </ItemGroup>
  16:   <!--Other Content-->
  17: </Project>

换句话说,如果你需要两个文件具有依赖创建,通过修改对应.csproj文件(或者.vbproj文件)完全可以达到你的目的。但是这样的方式在操作性上是极不方便的,那么是否具有更好的方法呢?

三、通过VS插件建立两个文件之间的依赖关系

实际上,关于方便建立两个项目文件之间的依赖关系,网上有很多开源的VS插件。如果你对VS扩展开发比较熟悉,你甚至可以自己开发。由于我对此一窍不通,所以只能寻找现有的工具,我发现有一款叫作IStaySharp.CreateDependency的工具不错。IStaySharp.CreateDependency提供了一个VS宏,你将它加载到VS中,基于此创建对应的工具栏命令。然后再Solution Exploror选择两个项目文件,点击该工具栏按钮即可。这个VS宏文件你可以通过这里直接下载,这里还提供一个很短的视频为你展示了相关的安装、使用过程。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

基于ansible role实现LAMP平台批量部署

前言 作为运维人员,当面对几十台或上百台服务器需要修改某个参数或部署某个平台,你将从何入手呢?ansible的出现很好的解决了这一困扰,ansible基于P...

2504
来自专栏林德熙的博客

Roslyn 通过 nuget 统一管理信息

在日常的开发中,如果需要发布多个库,多个库之间的版权和作者等信息都是相同的。如果需要每次更改信息都打开项目进行编辑,这个效率是很低的。本文提供一个方式,通过安装...

1022
来自专栏Sorrower的专栏

内核必须懂(二): 文件系统初探

1223
来自专栏美丽应用

Primitive Ftpd:将设备变身为FTP/SFTP服务器

1981
来自专栏BigNerdCoding

Rails 部署总结

学 Ruby 和 Rails 有一段时间了,后面准备也准备把站点换了。不过开始开发之前,我先把 Rails 部署的坑先踩了。之所以部署先行是因为之前 Djang...

4715
来自专栏逸鹏说道

Ubuntu16.04安装QT5.8.0

VSCode编辑器开发CPP:http://www.cnblogs.com/dotnetcrazy/p/6661921.html 下载QT run文件(安装包)...

5155
来自专栏小白课代表

我就是要在Win10中运行Win7!!!

很多时候我们使用的软件很“矫情”,有的只支持Windows10,有的对Windows7兼容性最好,尤其是课代表这种喜欢折腾,经常和各种软件打交道的人来说,只有一...

1792
来自专栏农夫安全

常见Web源码泄露总结

? .hg源码泄漏 漏洞成因: hg init的时候会生成.hg e.g.http://www.example.com/.hg/ 漏洞利用: 工具:dvc...

4676
来自专栏软件测试经验与教训

看图说话:文件包含(File Inclusion)漏洞示例

作为测试人员,我们常常听到“安全测试”这个词,但鲜有人真正做过安全测试。从我们的职责“保障质量”角度来说,说是一种“失职”也不为过。那么安全测试是什么,究竟怎么...

2201
来自专栏小怪聊职场

爬虫课程(三)|Python2和Python3的比较及安装

3106

扫码关注云+社区

领取腾讯云代金券