1. 概要

古人云: 工欲善其事,必先利其器.

学习一种新的开发, 就要先了解其开发工具 和 项目结构. 目前WPF 项目的开发工具 常用的是 Visual Studio, 也有其他开发工具如: Rider. 这里使用微软官方的开发工具 -- Visual Studio(以下简称VS)

2. 新建项目/解决方案

打开 VS, 新建项目, 页面如下:

选择 C#语言 Windows平台 桌面项目, 这里选择创建 .Framework 应用:

点击 下一步, 填写 项目名称, 选择框架版本. 如果是单独项目解决方案 就勾选 放置在同一个目录, 如果是多项目的解决方案 就不勾选.

下图为 解决方案和项目放在同一个目录

下图为 不勾选 解决方案和项目放在同一个目录中

点击创建, VS 会自动创建新项目.

3. 解决方案和项目的目录结构

创建WPF 项目以后, 切换到 解决方案资源管理查看项目结构:

下图为 解决方案和项目不同目录的默认目录结构图

下图为解决方案和项目同一个目录的目录结构图

从上图基本看不出差别, 唯一的差别在于解决方案的标题提: "解决方案"FirstWPF"" 后面的说明:

  • 解决方案"FirstWPF"(1个项目/共1个)
  • 解决方案"FirstWPF"(1个项目)

但是从资源管理器查看文件夹,可以看出不同:

从上图可以看出区别是 将 .vs文件夹FirstWPF.sh 文件移动到 和 FirstWPF项目文件夹同一个层级. 其中:

  • FirstWPF.sh : 此文件为解决方案的配置文件
  • FirstWPF.csproj : 此文件为 项目的配置文件

我们打开两个不同创建方式的 解决方案配置文件查看内容, 发现不同的地方:

## 同一个目录的 解决方案部分内容
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FirstWPF", "FirstWPF.csproj", "{28D50E34-3BD6-4AF0-8B56-FF05F054DAAF}"## 不同一个目录的 解决方案部分内容
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FirstWPF", "FirstWPF\FirstWPF.csproj", "{13EAA442-8D8A-4848-9996-39F215B9C57D}"

4. WPF项目的目录结构

在VS 的 解决方案资源管理器中 , 可以切换显示模式:

上图中我们可以看到 WPF 工程的项目结构, 其用途如下:

  • FirstWPF : 解决方案的名字

    • FirstWPF : 项目的名字

      • bin/ : 用来保存项目生成后的程序集, 一般有 Debug 和 Release 两个版本.我们可以通过:项目属性—>配置属性—>输出路径来修改

        • Debug
        • Release
      • obj/ : 保存每个模块的编译结果, 对应的会有 Debug 和 Release两个目录

        • Debug
        • Release
      • Properties : 项目属性文件夹

        • AssemblyInfo.cs : 程序集配置信息文件, 可以修改
        • Resources.Designer.cs : VS 自动生成的资源设计视图, 打开如下面的"资源管理视图"
        • Resources.resx : 和上面的 Resources.Designer.cs 一起组成资源管理视图
        • Settings.Designer.cs : VS自动生成项目配置视图
        • Settings.settings : 应用程序设置允许动态存储和索引应用程序的属性设置和其他信息.
        • App.config : 项目的属性配置文件
      • App.xaml : 项目入口 Application 类的子类的xaml 文件
      • App.xaml.cs : 项目的入口 Application 类的子类
      • FirstWPF.csproj : 项目结构配置文件
      • MainWindow.xaml : 默认的第一个界面的设计文件
      • MainWindow.xaml.cs : 默认的第一个界面的代码文件

在解决方案资源管理器 切换到工程模式显示如下:

双击 Properties 会显示 项目配置的 UI 界面:

双击 Resources.resx会显示资源管理视图: 资源管理视图

双击 Settings.settings 会显示设置视图:

5. WPF项目的接口默认内容

5.1 项目文件 FirstWPF.csproj

打开FristWPF.csproj文件, 内容如下 :

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /><PropertyGroup><Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration><Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform><ProjectGuid>{13EAA442-8D8A-4848-9996-39F215B9C57D}</ProjectGuid><OutputType>WinExe</OutputType><RootNamespace>FirstWPF</RootNamespace><AssemblyName>FirstWPF</AssemblyName><TargetFrameworkVersion>v4.5</TargetFrameworkVersion><FileAlignment>512</FileAlignment><ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids><WarningLevel>4</WarningLevel><Deterministic>true</Deterministic></PropertyGroup><PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "><PlatformTarget>AnyCPU</PlatformTarget><DebugSymbols>true</DebugSymbols><DebugType>full</DebugType><Optimize>false</Optimize><OutputPath>bin\Debug\</OutputPath><DefineConstants>DEBUG;TRACE</DefineConstants><ErrorReport>prompt</ErrorReport><WarningLevel>4</WarningLevel></PropertyGroup><PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "><PlatformTarget>AnyCPU</PlatformTarget><DebugType>pdbonly</DebugType><Optimize>true</Optimize><OutputPath>bin\Release\</OutputPath><DefineConstants>TRACE</DefineConstants><ErrorReport>prompt</ErrorReport><WarningLevel>4</WarningLevel></PropertyGroup><ItemGroup><Reference Include="System" /><Reference Include="System.Data" /><Reference Include="System.Xml" /><Reference Include="Microsoft.CSharp" /><Reference Include="System.Core" /><Reference Include="System.Xml.Linq" /><Reference Include="System.Data.DataSetExtensions" /><Reference Include="System.Net.Http" /><Reference Include="System.Xaml"><RequiredTargetFramework>4.0</RequiredTargetFramework></Reference><Reference Include="WindowsBase" /><Reference Include="PresentationCore" /><Reference Include="PresentationFramework" /></ItemGroup><ItemGroup><ApplicationDefinition Include="App.xaml"><Generator>MSBuild:Compile</Generator><SubType>Designer</SubType></ApplicationDefinition><Page Include="MainWindow.xaml"><Generator>MSBuild:Compile</Generator><SubType>Designer</SubType></Page><Compile Include="App.xaml.cs"><DependentUpon>App.xaml</DependentUpon><SubType>Code</SubType></Compile><Compile Include="MainWindow.xaml.cs"><DependentUpon>MainWindow.xaml</DependentUpon><SubType>Code</SubType></Compile></ItemGroup><ItemGroup><Compile Include="Properties\AssemblyInfo.cs"><SubType>Code</SubType></Compile><Compile Include="Properties\Resources.Designer.cs"><AutoGen>True</AutoGen><DesignTime>True</DesignTime><DependentUpon>Resources.resx</DependentUpon></Compile><Compile Include="Properties\Settings.Designer.cs"><AutoGen>True</AutoGen><DependentUpon>Settings.settings</DependentUpon><DesignTimeSharedInput>True</DesignTimeSharedInput></Compile><EmbeddedResource Include="Properties\Resources.resx"><Generator>ResXFileCodeGenerator</Generator><LastGenOutput>Resources.Designer.cs</LastGenOutput></EmbeddedResource><None Include="Properties\Settings.settings"><Generator>SettingsSingleFileGenerator</Generator><LastGenOutput>Settings.Designer.cs</LastGenOutput></None></ItemGroup><ItemGroup><None Include="App.config" /></ItemGroup><Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

1. ToolsVersion

此属性的含义是 MSBuild 的版本, 此部分说明在官方的 MSBuild 说明文档中:

2. PropertyGroup

接着的三个 PropertyGroup 分别配置了项目的构建类型: Debug | Release, 包括了:

  • Configuration : 配置名称
  • Platform : 运行平台
  • ProjectGuid : 项目的guid
  • OutputType: 输出类型 , win exe
  • RootNamespace : 根命名空间的名字
  • AssemblyName : 程序集名称

等等一些配置信息. 我们打开配置管理器可以看到 UI界面:

3. Reference ItemGroup

下面的 ItemGroup 是引用信息, 默认引用了以下内容:

  • System : 包含用于定义常用值和引用数据类型、事件和事件处理程序、接口、特性以及处理异常的基础类和基类。
  • System.Data: 提供对表示 ADO.NET 结构的类的访问。 通过 ADO.NET,可以生成可有效管理多个数据源的数据的组件。
  • System.Xml : 标准的 xml 支持
  • Microsoft.CSharp : 包含支持使用 C# 语言编译和生成代码的类
  • System.Core : 引用 System.Core.dll
  • System.Xml.Linq : 包含 LINQ to XML 的类。 LINQ to XML 是内存中的 XML 编程接口,可以轻松有效地修改 XML 文档。
  • System.Data.DataSetExtensions : 引用 DataSetExtensions.dll
  • System.Net.Http : 提供用于现代 HTTP 应用程序的编程接口。
  • System.Xaml : 提供与 XAML 读取器和 XAML 编写器相关的类型。
  • WindowsBase: Window 基础dll
  • PresentationCore : 动态链接文件库
  • PresentationFramework : 动态链接文件库

4. 项目文件的 ItemGroup

接着的几个 ItemGroup为 项目的文件索引,包含:

  • ApplicationDefinition : 项目的Application的 xaml和cs文件
  • Page : 项目UI 界面
  • Properties 目录下的文件
  • App.config 文件

5.2 App.config

打开 App.config 文件 可以看到以下内容:

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

配置了 项目启动时所需的 环境为 .NETFramework 4.5

5.3 AssembleInfo.cs

此文件为程序集的配置信息, 包含内容如下:

using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows;// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("FirstWPF")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("FirstWPF")]
[assembly: AssemblyCopyright("Copyright ©  2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]//若要开始生成可本地化的应用程序,请设置
//.csproj 文件中的 <UICulture>CultureYouAreCodingWith</UICulture>
//例如,如果您在源文件中使用的是美国英语,
//使用的是美国英语,请将 <UICulture> 设置为 en-US。  然后取消
//对以下 NeutralResourceLanguage 特性的注释。  更新
//以下行中的“en-US”以匹配项目文件中的 UICulture 设置。//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)][assembly: ThemeInfo(ResourceDictionaryLocation.None, //主题特定资源词典所处位置//(未在页面中找到资源时使用,//或应用程序资源字典中找到时使用)ResourceDictionaryLocation.SourceAssembly //常规资源词典所处位置//(未在页面中找到资源时使用,//、应用程序或任何主题专用资源字典中找到时使用)
)]// 程序集的版本信息由下列四个值组成:
//
//      主版本
//      次版本
//      生成号
//      修订号
//
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

5.4 App.xaml和App.xaml.cs

此文件为 Application 的子类, 继承默认的WPF项目类内容, 同时可以扩展自己的配置, 类似于 Android 中的 Application 类. 其内容如下:

App.xaml

<Application x:Class="FirstWPF.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:FirstWPF"StartupUri="MainWindow.xaml"><Application.Resources></Application.Resources>
</Application>

在 Appli.Resources Tag里面可以配置 项目级别的资源引用.

App.xaml.cs

namespace FirstWPF
{/// <summary>/// App.xaml 的交互逻辑/// </summary>public partial class App : Application{}
}

此类中可以监听应用的启动, 关闭等回调:

namespace FirstWPF
{/// <summary>/// App.xaml 的交互逻辑/// </summary>public partial class App : Application{protected override void OnStartup(StartupEventArgs e){base.OnStartup(e);}protected override void OnExit(ExitEventArgs e){base.OnExit(e);}}
}

5.5 MainWindow 文件

此文件 为默认的第一个界面的代码, 其布局文件为只包含Grid 的空布局:

<Window x:Class="FirstWPF.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:FirstWPF"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid></Grid>
</Window>

对应的代码文件包含了初始化处理:

namespace FirstWPF
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}}
}

6. 后记

至此, WPF项目的基本结构说明就到此, 后续根据项目需要可以增加修改文件和内容, 如添加 多个资源文件参见另一篇文章: WPF APP项目添加资源文件夹 - DevWiki

WPF解决方案和项目结构相关推荐

  1. 学习WPF之解决方案和项目结构

    1. 概要 古人云: 工欲善其事,必先利其器. 学习一种新的开发, 就要先了解其开发工具 和 项目结构. 目前WPF 项目的开发工具 常用的是 Visual Studio, 也有其他开发工具如: Ri ...

  2. Orchard 的项目结构-解决方案文件夹的原理与使用

    Orchard 的项目结构-解决方案文件夹的原理与使用 参考文章: (1)Orchard 的项目结构-解决方案文件夹的原理与使用 (2)https://www.cnblogs.com/haogj/ar ...

  3. 【移花接木】Maven项目结构调整解决方案

    [解决方案]Maven项目结构调整 一.背景 二.思路 三.调整步骤 3.1 调整`system`子模块POM文件 3.2 调整`业务A`子模块POM文件 3.3 资源文件剪切到`业务A`子模块 3. ...

  4. 【转载】C#编码标准━━项目设置和项目结构

    1.总是在4级警高上建立你的项目. 2.在发布版(Release)中,把警告当成错误来对待(注意这并不是 Visual Studio的默认选项).我们建议在调试版(Debug)中也这样设置,尽管这不是 ...

  5. Java04-day04【IDEA(概述、启动配置、项目结构、内容辅助键、快捷键、模块操作)、数组(定义详解、动态初始化、访问)、内存分配、数组内存图】

    java零基础入门到精通(2019版)[黑马程序员] 视频+资料:[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] &qu ...

  6. 01Prism WPF 入门实战 - 项目准备

    1.概要 这一系列将进行Prism+WPF技术的实战讲解.实战项目内容选型为Email邮件收发的客户端(WeMail),项目结构简单方便大家理解. 相关技术:C#.WPF.Prism 软件开发环境:V ...

  7. java ee maven_针对新手的Java EE7和Maven项目–第1部分–简单的Maven项目结构–父pom...

    java ee maven 为什么呢 很多时候,我在日常工作中试图解决一些基本或复杂的Maven / Java EE项目结构问题. 为了提供解决方案,我经常最终会尝试项目结构,测试我在不同应用程序服务 ...

  8. 针对新手的Java EE7和Maven项目–第1部分–简单的Maven项目结构–父pom

    为什么呢 很多时候,我在日常工作中试图解决一些基本或复杂的Maven / Java EE项目结构问题. 为了提供解决方案,我经常最终会尝试项目结构,测试我在不同应用程序服务器上的部署并细化我的配置. ...

  9. 认识ASP.NET 5项目结构和项目文件xproj

    ASP.NET 5 在项目结构上做了很大的改变,我们以前熟悉的目录结构与项目文件内容都不太一样了,本篇文章带大家了解 ASP.NET 5 到底跟以前有哪些不一样的地方. 我们先用 Visual Stu ...

最新文章

  1. office文档、图片、音/视频格式转换工具
  2. 堆排序\链表实现局部排序
  3. Web开发环境搭建 Eclipse-Java EE 篇
  4. Android 底部导航栏的简单实现-BottomNavigationView
  5. Makefile 规则
  6. 摔倒、摔倒检测数据集
  7. RESTful开发风格
  8. java flask_将Java与Python Flask连接
  9. Serverless 如何做到快速发布?微应用平台技术实践
  10. 通过反编译让SpecFlow支持多层属性值的验证
  11. 蓝桥杯 ADV-209 算法提高 c++_ch02_04
  12. 北京互联网地域歧视链
  13. Nginx: 解决connect() to xxxx failed (13: Permission denied) while connecting to upstream的问题
  14. SI4463实验笔记
  15. 解决 ModuleNotFoundError: No module named ‘PySide2.QtUiTools‘
  16. 无法加载文件 C:\Users\*****\AppData\Roaming\npm\cnpm.ps1,因为在此系统上禁止运行脚本。——VScode终端问题解决办法
  17. bam文件读取_SAM/BAM 格式文件内容解析
  18. 南卡OE Pro上线!开放式耳机新里程碑!前所未有的音质舒适双冠
  19. 计算机图形学:实验二——OpenGL绘制基本图形
  20. postgresQL通过出生日期获取年龄

热门文章

  1. oracle导出导入同义词,使用datapump 导出导入同义词
  2. matlab 指定坐标轴,matlab设置坐标轴范围
  3. 打开catia界面全是白色怎么办_CATIA复合材料设计教程:1.软件安装
  4. word文档合并的几种方式
  5. 详解OSI七层模型和TCP/IP模型
  6. mysql8删除root用户,Window下如何恢复被删除的Mysql8.0.17 Root账户及密码
  7. 2022/12/17 mysql 索引基本原理解读
  8. 农夫过河c语言算法,农夫过河
  9. IR077K firmware设计
  10. 简单实用,聊聊我常用的 4 款 Pandas 自动数据分析神器