zoukankan      html  css  js  c++  java
  • C#解决方案生成工具

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

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

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

    主要文件:

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

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

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

        // MyTestEntity : 项目名字 , MyTestEntityMyTestEntity.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="PropertiesAssemblyInfo.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五项目的解决方案,编译通过.但还需要丰富项目中的各种功能的文件模板.

  • 相关阅读:
    ffmpeg一些filter使用方法、以及一些功能命令
    Hibernate调试——定位查询源头
    emmet语法
    [心得]传统IT转互联网面试经验分享
    Java中的集合类型的继承关系图
    Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式
    oracle求时间差的常用函数
    jdbc读取新插入Oracle数据库Sequence值的5种方法
    Xpath语法格式整理
    Oracle中 Instr 这个函数
  • 原文地址:https://www.cnblogs.com/mirrortom/p/8298097.html
Copyright © 2011-2022 走看看