在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会默认为你创建一套具有依赖关系的文件。

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

再举一个例子,在《如何让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宏文件你可以通过这里直接下载,这里还提供一个很短的视频为你展示了相关的安装、使用过程。


作者:蒋金楠
微信公众账号:大内老A
微博: www.weibo.com/artech
如果你想及时得到个人撰写文章以及著作的消息推送,或者想看看个人推荐的技术资料,可以扫描左边二维码(或者长按识别二维码)关注个人公众号(原来公众帐号 蒋金楠的自媒体将会停用)。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
相关文章
|
存储 Shell Linux
【Shell 命令集合 系统设置 】Linux 置环境变量 grpconv命令 使用指南
【Shell 命令集合 系统设置 】Linux 置环境变量 grpconv命令 使用指南
118 0
|
9月前
|
机器学习/深度学习 人工智能 算法
现身说法,AI小白的大模型学习路径
写这篇文章的初衷:作为一个AI小白,把我自己学习大模型的学习路径还原出来,包括理解的逻辑、看到的比较好的学习材料,通过一篇文章给串起来,对大模型建立起一个相对体系化的认知,才能够在扑面而来的大模型时代,看出点门道。
1024 79
|
Python
Matplotlib 教程 之 Matplotlib 柱形图 4
本教程介绍如何使用 Matplotlib 的 `bar()` 方法绘制柱形图,涵盖 `x`、`height`、`width`、`bottom` 和 `align` 等参数的使用方法,并通过示例展示了如何自定义柱形颜色。`x` 表示 x 轴数据,`height` 为柱高,`width` 为柱宽,默认 `0.8`;`bottom` 代表底座 y 坐标,默认为 `0`;`align` 控制对齐方式,默认 `&#39;center&#39;`。示例中,通过不同颜色设置,展示了百度相关数据的柱形图。
129 0
|
数据采集 监控 数据挖掘
ERP系统中的数据分析与报表生成
【7月更文挑战第25天】 ERP系统中的数据分析与报表生成
935 2
|
缓存 算法 Java
提升编程效率的利器: 解析Google Guava库之常用工具类-40个示例(七)
提升编程效率的利器: 解析Google Guava库之常用工具类-40个示例(七)
|
Oracle 安全 Java
JAVA用Mail发送API的方法步骤教程
使用Java和Mail发送API实现自动化邮件发送,提高效率。步骤包括:1. 安装JDK并配置JAVA_HOME,2. 添加JavaMail库(可通过Maven或官网下载)。配置邮件发送涉及邮件服务器地址、端口和认证信息。创建邮件会话、邮件消息对象,然后使用Transport发送。示例代码展示完整流程。注意处理认证失败、连接问题和邮件发送失败等常见问题。
|
消息中间件 存储 监控
深度解析Broker的角色与魔法
深度解析Broker的角色与魔法
974 0
解决出现Caused by: org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 6; 不允许有匹配 “[xX][mM][lL]“
解决出现Caused by: org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 6; 不允许有匹配 “[xX][mM][lL]“
1258 0
|
存储 缓存 固态存储
一步步实现SDDC-双节点VSAN部署
实验摘要: 1>ROBO VSAN部署(双节点VSAN) [难度★★复杂度★★]
|
存储 大数据 API
swift 中 Realm 使用详解
当涉及到在 Swift 项目中进行本地数据库存储时,Realm 是一个强大且易用的解决方案。它提供了高性能、跨平台的数据库引擎,能够轻松地处理数据持久化和查询操作。本篇博客将介绍 Realm 的基本使用方法,以及一些需要注意的事项,从而能更好地利用 Realm 来管理本地数据。
1187 0