实验环境  VS2017 C# .NET4.6 项目都是.net framework框架

目的: 用程序生成解决方案和项目.

思路:手动建一个方案和项目,分析其中的文件内容,做成模板后,由程序调用.最终生成和手动建立的解决方案一样的内容.

主要文件:

  .sln : 解决方案文件,在解决方案目录下,记录所含的项目.每个项目是一个Project ... EndProject节点

    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyTestEntity", "MyTestEntity\MyTestEntity.csproj", "{6DD60299-FBA4-4284-BFD2-4CB2626A93F5}"
    EndProject

    // 第一个GUID表示项目类型(这个是C#项目的).不同项目类型都有个GUID号.这是指定的.网上可查到各种项目的GUID

    // MyTestEntity : 项目名字 , MyTestEntity\MyTestEntity.csproj : 项目.csproj文件路径(相对于解决方案文件夹的) , 后一个GUID是这项目专用的

    GlobalSection(ProjectConfigurationPlatforms) = postSolution

      {6DD60299-FBA4-4284-BFD2-4CB2626A93F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

    EndGlobalSection

    // 这个节点不清,大概记录了项目编译时的平台,目前是生搬硬套的,结果生成的项目可以正常编译.

  .csproj : 项目文件,在项目目录下,记录所含的每一个文件,是一个XML文档.C#项目的扩展名叫csproj,意为C#项目.

    <PropertyGroup>

      <ProjectGuid>// 项目GUID标识

      <AppDesignerFolder>// 程序集信息文件夹,就是项目中的这个Properties文件夹.里面有个AssemblyInfo.cs记录了程序集的相关信息

      <RootNamespace>// 命名空间

      <AssemblyName>// 程序集名

      <TargetFrameworkVersion>// 使用.NET框架版本

    <ItemGroup>

      <Reference Include="System" />// 项目添加的程序集引用

    <ItemGroup>
           <Compile Include="Properties\AssemblyInfo.cs" />// 项目文件,生成操作为"Compile"(编译) 其后为文件路径(相对于项目目录的)

       <Content Include="Web.config" />// 项目文件,生成操作为"Content"(内容).

      // 查看其它生成操作的办法是,选中文件按F4,点击"生成操作"右侧的列表,有编译,内容,嵌入...

    <ItemGroup>
        <Folder Include="App_Data\" />// 项目文件夹,路径也是相对于项目目录的

    <ItemGroup>
        <ProjectReference // 项目添加的项目引用

  其它文件 : 对不同的项目,包含文件不一样,除了AssemblyInfo.cs这个都有外.空类库项目不含文件.web项目包含 web.config webapiconfig.cs等文件.这些文件内容可以一样,模板易做.

制作模板:

  除.sln,.csproj外,其它文件的模板可以用导出项目模板的方式取得.

具体办法是,手动建一个项目,然后使用VS的导出模板功能(选中项目,点击菜单:项目->导出模板),完成后会得到一个压缩文件,解压之.会看到里面的项目文件,打开后发现需要变化的地方比如类的命名空间之类的,已经用"$XXX$"这种形式占位了.所以只需要考虑替换的内容,而不用考虑哪些地方需要替换.直接将这些文件拿出来就有了模板.

.sln,.csproj文件模板比较难做,里面的项目节点和文件节点需要动态生成.目前借助的是MS提供的T4模板,这个东西很好用.使用它的"运行时模板"可以实现.T4模板可以生成文本文件,生成代码非常容易.如果用过razor,很容易明白它的使用方式,模板里可以运行C#程序,生成各种内容.

  t4运行时模板添加后,会自动生成一个以该文件名为类名的类,是一个部分类.调用其中的TransformText()方法得到最终生成的文本.如果需要传参数,可以建一个同名的分部类,添个构造方法.如果需要修改命名空间,不能直接在类上修改,因为修改后,一保存模板,它就恢复原样了,需要选中模板,按F4,在属性"自定义工具命名空间"修改.

生成过程:

  项目和解决方案各文件的模板都准备就绪后,开始生成各文件,最终生成解决方案.(生成的文件内容是缓存的,不生成在磁盘上)

    先生成项目的各种文件,包含项目特定文件的和自定义的文件(按特定项目目录结构摆放),注意项目间可能有项目引用要添加的,比如工具类项目会被其它类添加引用.

  最后生成.csproj文件.如果有多个项目,重复这个过程

    再生成.sln解决方案文件.这个相对简单些.

  得到完全的解决方案文件数据之后,将这些文件保存到磁盘上,先后顺序由外层的解决方案目录开始,到最各项目文件.

    <解决方案目录>

      .sln

      <项目1目录>

        .csproj

        web.config

        <Controllers>

        <App_Start>

        .....

     <项目2目录>....

程序架子大概如此,目前生成一个DAL BLL WEBAPI ENTITY LIB五项目的解决方案,编译通过.但还需要丰富项目中的各种功能的文件模板.

C#解决方案生成工具的更多相关文章

  1. C#解决方案生成工具(2)

    环境  VS2017 社区版 W10 Project类 : 在Microsoft.Build.Evaluation命名空间下,可使用Project类分析项目的.csproj文件 // 实例化对象,参数 ...

  2. 赞!jsPDF – 基于 HTML5 的强大 PDF 生成工具

    jsPDF 是一个基于 HTML5 的客户端解决方案,用于生成各种用途的 PDF 文档.使用方法很简单,只要引入 jsPDF 库,然后调用内置的方法就可以了.浏览器兼容性: IE 10, Firefo ...

  3. jsPDF – 基于 HTML5 的强大 PDF 生成工具

    jsPDF 是一个基于 HTML5 的客户端解决方案,用于生成各种用途的 PDF 文档. 使用方法很简单,只要引入 jsPDF 库,然后调用内置的方法就可以了. 米扑科技项目用到了HHTML5生成PD ...

  4. 【C#附源码】数据库文档生成工具支持(Excel+Html)

    [2015] 很多时候,我们在生成数据库文档时,使用某些工具,可效果总不理想,不是内容不详细,就是表现效果一般般.很多还是word.html的.看着真是别扭.本人习惯用Excel,所以闲暇时,就简单的 ...

  5. 微软开源全新的文档生成工具DocFX

    微软放弃Sandcastle有些年头了,微软最近开源了全新的文档生成工具DocFX,目前支持C#和VB,类似JSDoc或Sphinx,可以从源代码中提取注释生成文档之外,而且还有语法支持你加入其他的文 ...

  6. css sprite,css雪碧图生成工具V3.0更新

    V3.0主要改进 1.增加了单独添加单张图片以及删除单张图片的功能 2.增加了生成.sprite文件用以保存雪碧图信息 3.增加了打开.sprite文件功能 什么是css sprite CSS spr ...

  7. DBImport v3.44 中文版发布:数据库数据互导及文档生成工具(IT人员必备)

    前言: 距离上一个版本V3.3版本的文章发布,已经是1年10个月前的事了. 其实版本一直在更新,但也没什么大的功能更新,总体比较稳定,所以也不怎么写文介绍了. 至于工作上的事,之前有半年时间跑去学英语 ...

  8. C/C++ makefile自动生成工具(comake2,autotools,linux),希望能为开源做点微薄的贡献!

      序     在linux下C或C++项目开发,Makefile是必备的力气,但是发现手写很麻烦. 在百度有个comake2工具,用于自动生成Makefile工具,而在外边本想找一个同类工具,但发现 ...

  9. .NET平台开源项目速览(4).NET文档生成工具ADB及使用

    很久以前就使用ADB这个工具来生成项目的帮助文档.功能强大,在学习一些开源项目的过程中,官方没有提供CHM帮助文档,所以为了快速的了解项目结构和注释.就生成文档来自己看,非常好用.这也是一个学习方法吧 ...

随机推荐

  1. [2017BUAA软工助教]个人项目测试结果

    个人项目测试结果 标签(空格分隔): 未分类 9.29第一次测试结果 注:点击表头内相应项目可针对该项目进行排序 -c测试结果 INDEX NumberID -c 1 -c 5 -c 100 -c 5 ...

  2. 【学习总结】Master课程 之 虚拟化与云计算

    Section 1- Cloud Computing Introduction-云计算介绍 1-What can Cloud Computing do? - 云计算可以做什么? 服务模式:美国国家标准 ...

  3. zabbix使用jmx监控tomcat

    zabbix监控Tomcat/JVM实例性能(115) – 运维生存时间http://www.ttlsa.com/zabbix/zabbix-use-jmx-monitor-tomcat/ zabbi ...

  4. Docker 安装和配置

    #centos 6 需要另外安装 yum install lxc libcgroup device-mapper-ecent-libs 推荐centos7 安装深事#centos 7 直接安装就好yu ...

  5. 通过arcmap发布缓存服务,无法选择自定义方案

    出现该问题是因为缓存目录有该缓存信息,清楚掉之后就可以选择自定义方案了

  6. [转帖]中关村:LED屏幕和OLED屏幕有什么区别?答案在这里

    LED屏幕和OLED屏幕有什么区别?答案在这里   中关村在线 01-0810:40 目前的电视市场,更新换代的频率越来越快,无论是国产品牌还是合资品牌,都不约而同的推出了全新产品.这离不开人们对更好 ...

  7. 下拉框、下拉控件之Select2

    一.Select2的功能简介 select2插件给我们带来了更加友好的交互方式,比如查询控件展开后可通过关键字进行检索 例如: Select2也可以选择带查询控件的选择框... Select2也可以选 ...

  8. Day 3-4 函数进阶

    1.名称空间 定义:Python使用叫做命名空间的东西来记录变量的轨迹.命名空间是一个 字典(dictionary) ,它的键就是变量名,它的值就是那些变量的值.是存放变量和值的内存地址的绑定关系的空 ...

  9. Django模板渲染

    一 . 语法 # 关于模板渲染只需要记住两种语法就可以: 1.{{ }} # 里面写变量 2.{% %} # 里面写与逻辑相关的,比如for循环 二 . 变量名 在django的模板语言中按照语法: ...

  10. python之路--初识面向对象

    一 . 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大 ...