C#,入门教程(07)——软件项目的源文件与目录结构

上一篇:

C#,入门教程(06)——解决方案资源管理器,代码文件与文件夹的管理工具icon-default.png?t=N7T8https://blog.csdn.net/beijinghorn/article/details/124895033

创建新的 C# 项目后, Visual Studio 会自动创建一系列的目录与文件。
程序员后面的工作就是在这个目录及这些文件的基础上进行的。
本文对这些目录与文件做一个概要性的解释。

一、目录

1、默认的目录

Visual Studio 默认创建 3 个子目录及下层的目录。

\bin
\---Debug
\---Release
\obj
\---Debug
\---Release
\Properties

\bin 目录保存项目生成的程序集(.exe 或 .dll)
\bin\Debug 保存“调式版本Debug”模式的文件,一般都是在这个目录下能找到可执行文件 .exe
\bin\Release  保存“正式发布版本Release”模式的文件

\obj 目录保存项目的编译临时文件(一般无需操心)
\obj\Debug 保存“调式版本Debug”模式的文件
\obj\Release 保存“正式发布版本Release”模式的文件

\Properties 目录保存项目相关的一些设置信息,一般无需阅读与修改。


2、改良与更好的目录结构

建议在工程目录下创建 App_Code 子目录,用以保存工程相关的所有 namespace 的 class 文件。
并且按类别予以区分。比如,幸运之门50018.COM的目录结构:

\App_Code
\App_Code\Basic  存储常用的 Helper 类的基础静态类
\App_Code\K50018 存储核心数据分类代码
\App_Code\K50018\Basic 数据分析的基础代码
\App_Code\K50018\Entity 数据体(从数据库、文件获得)的相关代码
\App_Code\K50018\Algorithm 数据分析的算法代码
\App_Code\K50018\Graph 生成走势图表等分析结果的代码
。。。

请,举一反三!

二、文件

工程相关的文件分类两类:(1)*.cs 是C#源代码类;(2)*.else 其他类;

1、.sln 解决方案(solution)文件

.sln 是解决方案的配置文件,保存着项目project和解决方案的关系。
这个文件也是双击打开 Visual Studio 的默认文档。

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.1.32228.430
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Desktop", "Desktop.csproj", "{D87DE9F7-951F-4392-A24B-64DF168191CA}"
EndProject
。。。

2、.csproj 工程项目(C sharp project)文件

.csproj 为c sharp project的缩写。
.csproj 项目文件,保存着源代码、其他文档、资源和本项目的归属关系。
用编辑器(推荐韩国人写的Editplus!)打开 Desktop.csproj 文件,可以看到类似这样的(XML)内容:

。。。

<ItemGroup>
    <Compile Include="App_Code\K50018\Basic\Statistics.cs" />
    <Compile Include="App_Code\K50018\Algorithm\Prime.cs" />
    <Compile Include="App_Code\K50018\Graph\Trend.cs" />
。。。
    <Compile Include="Form1.cs">
        <SubType>Form</SubType>
    </Compile>
    <Compile Include="Form1.Designer.cs">
        <DependentUpon>Form1.cs</DependentUpon>
    </Compile>
    <Compile Include="Program.cs" />


。。。

3、App.config 项目配置文件

App.config 一般是这样的XML内容。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
</configuration>

4、Form 相关文件

(1)Form 相关

Form 是指软件的窗口。Form 相关文件是3个一组。

Form1.cs (窗口事件处理的)源代码
Form1.Designer.cs 窗口设计的源代码(初学者略过)
Form1.resx 窗口设计的资源信息(初学者掠过)

Form1.cs 一般是这样的内容:

// 引用系统的命名空间

using System;
using System.IO;
using System.Text;
using System.Data;
using System.Linq;
using System.Drawing;
using System.Threading;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Windows.Forms;

// 引用自己开发的命名空间
using Legalsoft.K50018;

namespace Desktop_Application
{
    public partial class Form1 : Form
    {
        // 默认构造函数
        public Form1()
        {
            InitializeComponent();
        }

        // 窗口加载时候的处理
        private void Form1_Load(object sender, EventArgs e)
        {
        }

        // button1 点击事件的处理
        private void button1_Click(object sender, EventArgs e)
        {
            //一般的代码都从这里起飞!
        }
    }
}

Form1.Designer.cs的内容一般这样:

namespace Desktop_Application
{
    partial class Form1
    {
        /// <summary>
        /// 必需的设计器变量。
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows 窗体设计器生成的代码

        /// <summary>
        /// 设计器支持所需的方法 - 不要修改
        /// 使用代码编辑器修改此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            this.panel1 = new System.Windows.Forms.Panel();
            this.button1 = new System.Windows.Forms.Button();
            this.panel2 = new System.Windows.Forms.Panel();
            this.webBrowser1 = new System.Windows.Forms.WebBrowser();
            this.panel1.SuspendLayout();
            this.panel2.SuspendLayout();
            this.SuspendLayout();
            
            。。。
        }
    }
}

Form1.resx 窗口设计的资源信息(初学者掠过)

<?xml version="1.0" encoding="utf-8"?>
<root>
  <!-- 
    Microsoft ResX Schema 
    
    Version 2.0
    
    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types.
    。。。
  -->
</root>


(2)更多的窗口

如果软件设计有多个窗口,则就具有多个配套的文件。常见的有:

欢迎窗口
Welcome.cs (窗口事件处理的)源代码
Welcome.Designer.cs 窗口设计的源代码(初学者略过)
Welcome.resx 窗口设计的资源信息(初学者掠过)

软件配置窗口
Setting.cs (窗口事件处理的)源代码
Setting.Designer.cs 窗口设计的源代码(初学者略过)
Setting.resx 窗口设计的资源信息(初学者掠过)

软件帮助窗口
Help.cs (窗口事件处理的)源代码
Help.Designer.cs 窗口设计的源代码(初学者略过)
Help.resx 窗口设计的资源信息(初学者掠过)

再见!
Bye.cs (窗口事件处理的)源代码
Bye.Designer.cs 窗口设计的源代码(初学者略过)
Bye.resx 窗口设计的资源信息(初学者掠过)


三、更多的项目!!!

压轴的,都是精彩的!

《幸运之门彩票网50018.COM》 有这样一系列的实际需求:
(1)网站:运行于 Windows Server 2008 之 IIS 的 Web 服务;
     需要 App_Code 下的所有代码支持的功能;
(2)合作:运行于合作伙伴 Linux 之 Web 服务;
     需要 App_Code 下的所有代码支持的功能;
(3)桌面PC:《蓝彩和app》;
     需要 App_Code 下的所有代码支持的功能;
(4)安卓(Andriod)App:《蓝彩和app》;
     需要 App_Code 下的所有代码支持的功能;
(5)苹果(iOS)App:《蓝彩和app》;
     需要 App_Code 下的所有代码支持的功能;
(6)合作伙伴Unity游戏软件内的《CaiPiao分析》;
     需要 App_Code 下的主要代码支持的功能;

于是,在我的工程目录下就有了这样一些文件:

App.config
Desktop.csproj 桌面PC软件
Desktop.sln
Web.csproj IIS网站,WEB服务
Web.sln
Linux.csproj LINUX,WEB服务
Linux.sln
MAPP-Andriod.csproj 安卓app
MAPP-Andriod.sln
MAPP-iOS.csproj 苹果app
MAPP-iOS.sln
Unity.csproj 游戏Unity app
Unity.sln
Form1.cs
Form1.Designer.cs
Form1.resx
Welcome.cs
Welcome.Designer.cs
Welcome.resx
Setting.cs
Setting.Designer.cs
Setting.resx
Help.cs
Help.Designer.cs
Help.resx
Bye.cs
Bye.Designer.cs
Bye.resx

重要的是!仅仅只需要维护一个 App_Code !!!

C# 是无与伦比的!

下一篇:

C#,入门教程(08)——基本数据类型及使用的基础知识icon-default.png?t=N7T8https://blog.csdn.net/beijinghorn/article/details/123906998


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/334357.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity—配置lua环境变量+VSCode 搭建 Lua 开发环境

每日一句&#xff1a;保持须臾的浪漫&#xff0c;理想的喧嚣&#xff0c;平等的热情 Windows 11下配置lua环境变量 一、lua-5.4.4版本安装到本地电脑 链接&#xff1a;https://pan.baidu.com/s/14pAlOjhzz2_jmvpRZf9u6Q?pwdhd4s 提取码&#xff1a;hd4s 二、高级系统设置 此电…

1月下半笔记(个人向)

最近才开始看d2l&#xff08;这种东西早该在两年前看的&#xff0c;拖到现在了&#xff09; 为了做项目还得学一手OpenGL&#xff08;被windows安装GLFW逼疯了&#xff09; 1.15 打完ICPC EC final回来&#xff0c;也许可以出一篇博客写下简单的题解。 对蛋白质相似空间子结…

你还在找PDF转Word的工具?一个好软件推荐,赶紧查收!

前言 前段时间朋友跟小白吐槽&#xff1a;为啥PDF文件转Word文档的工具都要收费&#xff1f; 因为他们都收费啊。 小白之前找了很多类似有这种功能的工具&#xff0c;都发现&#xff1a;不但收费&#xff0c;可能还附带全家桶&#xff0c;而且还有……广告&#xff01; 在一次…

Java学习(二十一)--JDBC/数据库连接池

为什么需要 传统JDBC数据库连接&#xff0c;使用DriverManager来获取&#xff1b; 每次向数据库建立连接时都要将Connection加载到内存中&#xff0c;再验证IP地址、用户名和密码&#xff08;0.05s~1s)时间。 需要数据库连接时候&#xff0c;就向数据库要求一个&#xf…

DNS寻址过程

用一张图详细的描述DNS寻址的过程&#xff0c;是高级前端进阶的网络篇&#xff1a; 主要是第三步要记仔细就行啦&#xff0c;每一步都要详细的记录下来&#xff0c;总结的脉络如下&#xff1a; 本地DNS缓存本地DNS服务器根域名服务器 顶级域名服务器再次顶级域名服务器权威域名…

【PIE-Engine 数据资源】全球 10 米土地覆盖产品 (ESA-2020)

文章目录 一、 简介二、描述三、波段四、示例代码参考资料 一、 简介 数据名称全球 10 米土地覆盖产品 (ESA-2020)时间范围2020年空间范围全球数据来源ESA WorldCover project 2020代码片段var imagespie. ImageCollection (“ESA/WORLD_COVER_2020”) 二、描述 全球 10 米土…

CVer从0入门NLP(二)———LSTM、ELMO、Transformer模型

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;专栏推荐&#xff1a;深度学习网络原理与实战 &#x1f34a;近期目标&#xff1a;写好专栏的每一篇文章 &#x1f34a;支持小苏&#xff1a;点赞&#x1f44d;&#x1f3fc;、…

(二十)Flask之上下文管理第一篇(粗糙缕一遍源码)

每篇前言&#xff1a; &#x1f3c6;&#x1f3c6;作者介绍&#xff1a;【孤寒者】—CSDN全栈领域优质创作者、HDZ核心组成员、华为云享专家Python全栈领域博主、CSDN原力计划作者 &#x1f525;&#x1f525;本文已收录于Flask框架从入门到实战专栏&#xff1a;《Flask框架从入…

获取编译工具链默认的链接脚本

1、ld命令使用“–verbose”参数 命令&#xff1a;riscv64-linux-gnu-ld --verbose想使用自己的链接脚本&#xff0c;链接时使用“-T”指定

安装布隆过滤器

上传并解压文件解压文件 tar -zxvf RedisBloom-2.2.4.tar.gz 进入解压好的文件 make一下 返回进入conf 配置文件 loadmodule /usr/local/etc/redis/redisbloom.so 粘入 拷贝redisbloom.so到容器 : docker cp redisbloom.so redis:/usr/local/etc/redis 重启redis : docker …

MySQL(四)——约束

上期文章 MySQL&#xff08;三&#xff09;——函数 文章目录 上期文章概述约束演示外键约束添加外键删除外键删除/更新行为 总结 概述 概念&#xff1a;作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据 目的&#xff1a;保证数据库中数据的正确、有效性和完整性…

Unity XR 设置VR设备手柄按键按下事件

一、Unity设置 1、导入XR Interaction Toolkit插件&#xff0c;导入示例资源&#xff08;如下图&#xff09;。 2、设置新版XR输入事件 ①打开XRI Default Input Action 面板。 ②设置左手柄上的按键就点击Action Maps 列表下的 XRI LeftHand Interaction选项&#xff0c;设置…

JS-节点操作

DOM节点 DOM树里的每一个内容都称之为节点 节点类型 1&#xff09;元素结点 所有的标签 比如body、div html是根节点 2&#xff09;属性节点 所有的属性 比如href、class 3&#xff09;文本节点 所有的文本 4&#xff09;其他 查找节点 父节点查找 parentNode属性 …

Spring Boot - 利用Resilience4j-Circuitbreaker实现断路器模式_防止级联故障

文章目录 PreResilience4j概述Resilience4j官方地址Resilience4j-Circuitbreaker应用场景微服务演示Address servicePOMModelRepositoryServiceControllerData InitProperties测试 Order serviceModelRepositoryServiceSet UpProperties测试 探究断路器调用order-service API 2…

[已解决]前端使用el-upload,后端使用文件上传阿里云报错:异常信息:java.lang.NullPointerException: null

前端使用el-upload&#xff0c;后端使用文件上传阿里云报错&#xff1a; 报错原因&#xff1a;前端image参数未传进去 解决方法&#xff1a;在el-upload添加属性 name"image" 文件传进去了&#xff01;

Spring Boot Aop 执行顺序

Spring Boot Aop 执行顺序 1. 概述 在 spring boot 项目中&#xff0c;使用 aop 增强&#xff0c;不仅可以很优雅地扩展功能&#xff0c;还可以让一写多用&#xff0c;避免写重复代码&#xff0c;例如&#xff1a;记录接口耗时&#xff0c;记录接口日志&#xff0c;接口权限&…

Java 抽象类

例如这样&#xff1a; 除非子类也是抽象类&#xff1b; Java的类是单继承&#xff0c;但是接口是多继承&#xff1b; 抽象类的特点&#xff1a; 例如&#xff1a; //2、抽象类里面可以有抽象方法&#xff0c;或者普通方法&#xff0c;但是有抽象方法的类必须是抽象类 抽象类可…

python 抽象接口和协议总结

通过实现特殊方法&#xff0c;自定义数据类型可以表现得跟内置类型一样&#xff0c;从而让我们写出更具表达力的代码——或者说&#xff0c;更具 Python 风格的代码。 功能协议接口__add__*__mul__str()先查找是否实现 __str__ 协议&#xff0c;没有查找是否实现 __repr__ boo…

机器人导纳控制实现框架

Safe, Stable and Intuitive Control for Physical Human-Robot Interaction - 知乎关于文章《Safe, Stable and Intuitive Control for Physical Human-Robot Interactio》的简记。 Safe, Stable and Intuitive Control for Physical Human-Robot Interaction目的根据力导数作…

计算机找不到msvcp120.dll的修复方法,总结五种可靠的方法

在计算机使用过程中&#xff0c;遭遇“找不到msvcp120.dll”这一问题的困扰是许多用户都可能遇到的情况。这一特定的系统文件msvcp120.dll&#xff0c;作为Microsoft Visual C Redistributable Package的重要组成部分&#xff0c;对于运行某些应用程序至关重要。当系统提示无法…