如何使用NAnt 自动打包DNN模块 之二

简介: 系列文章: 如何使用NAnt 自动打包DNN模块 之一 如何使用NAnt 自动打包DNN模块 之二 使用MSBuilder编译项目时,会出现找不到引用的DLL的问题。可以参考这里解决:http://www.beefycode.com/post/Resolving-Binary-References-in-MSBuild.aspx 安装完NAnt之后,我们就可以使用NAnt自动打包模块了。

系列文章:

如何使用NAnt 自动打包DNN模块 之一

如何使用NAnt 自动打包DNN模块 之二

使用MSBuilder编译项目时,会出现找不到引用的DLL的问题。可以参考这里解决:http://www.beefycode.com/post/Resolving-Binary-References-in-MSBuild.aspx

安装完NAnt之后,我们就可以使用NAnt自动打包模块了。

跟使用NAnt完成其他任何一件任务一样,我们需要创建一个.build文件。大家可以下载我这个文件作为模板。

我们将使用MSBuilder来编译整个项目,使用NAnt把大部分文件压缩到一个Resource.zip文件,并最后制作出一个PA包和一个源代码包。

我们来仔细看看这个.builder文件,这是一个XML文件,root元素是一个project, 其中包含了若干个target元素,这些target元素就是关键了。这里我着重讲一下需要注意和根据需要修改的target元素,其它的部分大家可以自己看看,相信很容易理解。

先看看第一个:

初始化

<target name="init">
    <property name="nant.settings.currentframework" value="net-2.0" />
    
    <!-- .NET framework settings -->
    <property name="dotNetFrameworkVersion" value="v3.5" overwrite="false" />

    <!-- This is where your packaged zips will build to from within the module folder -->
    <property name="package.dir" value="package" overwrite="false" />

    <!-- This is where your resource.zip will be built so it can be zipped and distributed with the release install zips -->
    <property name="resourcezip.dir" value="ResourceZip" />
    <property name="bin.dir" value="http://www.cnblogs.com/bin" />
    <property name="controls.dir" value="controls" />
    <property name="localresource.dir" value="App_LocalResources" />
    <property name="globalresource.dir" value="App_GlobalResources" />

    <property name="binZip" value="_Install" />
    <property name="srcZip" value="_Source" />

    <property name="rootWeb" value="http://localhost/" overwrite="false" />
    <property name="webAlias" value="DNN483Source" overwrite="false" />
    <property name="verbose" value="true" overwrite="false" />

    <!-- ModuleName value should be set specific to the project -->
    <property name="CompanyName" value="AboutDNN" overwrite="false"/>
    <property name="ModuleName" value="FlashImageRotator"  overwrite="false"  />
    <property name="subproject.name" value="${CompanyName}_${ModuleName}"/>
    <property name="module.dll" value="${bin.dir}/${CompanyName}_${ModuleName}.dll" />

    <property name="debug" value="false" overwrite="false" />
    <property name="config" value="debug" if="${debug}" />
    <property name="config" value="release" unless="${debug}" />

    <sysinfo />

    <if test="${verbose}">
      <echo message="solutionName: ${subproject.name}" />
      <echo message="debug:        ${debug}" />
      <echo message="config:       ${config}" />
    </if>

  </target>
 

这节里面初始化了一些跟项目有关的信息,其中最重要的是CompayName和ModuleName了。需要修改为你们自己的名称,这里还有一点要注意的是,注意看那个"subproject.nam”和"module.dll”,是由CompanyName和ModuleName组合而成的,所以你的.sln文件和DLL名称一定要符合这个规定。比如我的CompayName是"AboutDNN”,ModuleName是"FlashImageRotator”,那么我的.sln文件和DLL文件名就是这样的:

AboutDNN_FlashImageRotator.sln

AboutDNN_FlashImageRotator.DLL 

定义如何为PA包制作Resource.zip 文件:

<!-- Begin area for creating resourcezip for installable PA zips (should depend on target that clears where this will build zip file to)-->
  <target name="CreateResourceZip" depends="CleanResourceZip">
    <!-- create a flat directory to zip for install -->
    <mkdir dir="temp" unless="${directory::exists('temp')}" />
    <!-- DO NOT flatten this as we want to retain folder structure in this and ONLY this zip -->
    <copy todir="temp" flatten="false">
      <fileset>
        <!-- Tell nant what files to grab -->
        <!-- everything included here ends up in resource.zip, this should be excluded in the CreateBinZip -->
        <include name="**/images/*" />
        <include name="**/Flash/*" />
        <include name="**/Resources/**/*" />
        <include name="**/Docs/*.pdf" />
        <include name="**/${localresource.dir}/*.resx" />
        <include name="**/${globalresource.dir}/*.resx" />
        <include name="**/${globalresource.dir}/*.xml" />
        <include name="**/*.ascx" />
        <include name="**/*.css" />
        <include name="**/*.aspx" />
        <exclude name="**/DNNDebug.aspx" />
        <exclude name="**/Resources.zip" />
        <exclude name="**/Install/**/*" />
        <exclude name="**/_sgbak/*" />
        <exclude name="**/thumbs.db" />
        <exclude name="**/*.zip" />
        <exclude name="**/docs/images/*" />

      </fileset>
    </copy>

    <mkdir dir="${resourcezip.dir}" unless="${directory::exists(resourcezip.dir)}" />
    <zip zipfile="${resourcezip.dir}/Resources.zip">
      <fileset basedir="temp">
        <include name="**/*" />
        <exclude name="**/*.dll" />

      </fileset>
    </zip>

    <!--Delete temp directory -->
    <delete dir="temp" failonerror="false" />

  </target>

修改fileset部分就可以定义那些文件会打包进PA安装包的

制作源代码包的zip文件

<target name="CreateResourceSourceZip" depends="CleanResourceZip">
    <!-- create a flat directory to zip for install -->
    <mkdir dir="temp" unless="${directory::exists('temp')}" />
    <!-- DO NOT flatten this as we want to retain folder structure in this and ONLY this zip -->
    <copy todir="temp" flatten="false">
      <fileset>
        <!-- Tell nant what files to grab -->
        <!-- everything included here ends up in resource.zip, this should be excluded in the CreateBinZip -->
        <include name="**/images/*" />
        <include name="**/Themes/**/*" />
        <include name="**/Resources/**/*" />
        <include name="**/Documentation/**" />
        <include name="**/${localresource.dir}/*.resx" />
        <include name="**/${globalresource.dir}/*.resx" />
        <include name="**/${globalresource.dir}/*.xml" />
        <include name="**/*.ascx" />
        <include name="**/*.aspx" />
        <include name="**/*.cs" />
        <include name="**/*.sln" />
        <include name="**/*.csproj" />
        <include name="**/*.build" />
        <exclude name="**/DNNDebug.aspx" />
        <exclude name="**/Install/**/*" />
        <exclude name="**/_sgbak/*" />
        <exclude name="**/thumbs.db" />
        <exclude name="**/*.zip" />
        <exclude name="**/04.03.02.txt" />

      </fileset>
    </copy>

    <mkdir dir="${resourcezip.dir}" unless="${directory::exists(resourcezip.dir)}" />
    <zip zipfile="${resourcezip.dir}/Resources.zip">
      <fileset basedir="temp">
        <include name="**/*" />
        <exclude name="**/*.dll" />

      </fileset>
    </zip>

    <!--Delete temp directory -->
    <delete dir="temp" failonerror="false" />

  </target>

设置版本号

最后我们要保证在AssemblyInfo.cs文件中,正确的设置了一个版本号,这样NAnt会自动读取这个版本号,并生成对应的打包文件。

image 

到这里,就修改完.builder文件了。其实对于大家来说,只需要修改初始化部分的公司名称和项目名称就可以了,其它部分都可以使用默认的设置。

最后我们来让NAnt帮我们打包模块,进入到你模块所在的目录,键入NAnt命令:

image

NAnt之后就会卖力的编译模块和打包,哈,25秒搞定:

image

打包好的模块:

image

目录
相关文章
|
存储 缓存 Linux
Linux内核学习(九):linux内核的特殊文件系统-debugfs、ftrace、sys
Linux内核学习(九):linux内核的特殊文件系统-debugfs、ftrace、sys
449 0
|
存储 弹性计算 监控
解密EDAS新一代应用发布系统
本文针对 企业级分布式应用服务( EDAS ) 应用生命周期管理所使用的发布单系统进行介绍,包括背景、设计目标、设计方案、功能介绍等,新开发的发布单系统实现了变更过程的流程化、任务化、可视化,发布流程可定制,支持多种变更策略,自2017年8月上线以来,承担着 EDAS 生命周期管理操作。
6409 0
|
机器学习/深度学习 人工智能 自然语言处理
自然语言处理(NLP)的进展与挑战
【6月更文挑战第13天】自然语言处理(NLP)在深度学习推动下取得显著进展,包括循环神经网络、词嵌入技术及预训练模型(如BERT、GPT)的应用,突破了文本分类、问答系统等任务。然而,数据稀疏性、语言复杂性和模型可解释性仍是挑战。未来,NLP有望实现更高效、准确和可解释的技术,需关注数据隐私和伦理问题。
451 10
|
6月前
|
网络架构
精品网络时代:联通AS9929与10099的强强联合
中国联通的网络架构由AS4837、AS9929和AS10099三张骨干网组成,形成独特服务体系。常见组合如“AS4837(国内)+AS4837(国外)”适合普通需求,而“AS9929(国内)+AS10099(国外)”则针对高品质用户。通过识别AS编号可判断线路类型。未来,联通将持续优化,构建更智能灵活的网络体系,支持创新应用发展。
283 0
|
9月前
|
前端开发 Java Linux
一个简单项目部署带你认识OS Copilot
我是一名学生开发者,专注于云资源的运维和管理。本文通过一个简单的项目部署介绍OS Copilot,阿里云基于大模型构建的操作系统智能助手。项目使用了阿里Ant Design、React、Spring等技术栈,部署在Alibaba Cloud Linux上,涵盖前端Nginx服务器配置、Java后端打包与运行、MySQL安装等内容。OS Copilot支持自然语言问答、命令执行、系统调优,极大简化了Linux系统的操作,适合初学者快速上手。
171 2
一个简单项目部署带你认识OS Copilot
|
10月前
|
数据采集 安全 大数据
“点数成金”时代,如何应用全域数据资产治理释放企业数据价值?【瓴羊Dataphin在信通院2024数据资产管理大会】
在“点数成金”时代,企业数据成为宝贵资产。12月18-19日,信通院“2024数据资产管理大会”在京举办,瓴羊政企金融事业部总监徐宁分享了Dataphin在数据治理领域的创新方法论与实践经验,强调数据资产双循环和元数据管理的重要性。瓴羊副总裁王赛获颁数据资产管理专家证书。
266 16
|
12月前
|
安全 搜索推荐 Android开发
揭秘iOS与Android系统的差异:一场技术与哲学的较量
在当今数字化时代,智能手机操作系统的选择成为了用户个性化表达和技术偏好的重要标志。iOS和Android,作为市场上两大主流操作系统,它们之间的竞争不仅仅是技术的比拼,更是设计理念、用户体验和生态系统构建的全面较量。本文将深入探讨iOS与Android在系统架构、应用生态、用户界面及安全性等方面的本质区别,揭示这两种系统背后的哲学思想和市场策略,帮助读者更全面地理解两者的优劣,从而做出更适合自己的选择。
|
12月前
|
机器学习/深度学习 Python
深度学习笔记(九):神经网络剪枝(Neural Network Pruning)详细介绍
神经网络剪枝是一种通过移除不重要的权重来减小模型大小并提高效率的技术,同时尽量保持模型性能。
464 0
深度学习笔记(九):神经网络剪枝(Neural Network Pruning)详细介绍
|
Python
Python中列表和整数相乘
【6月更文挑战第3天】
396 4
|
存储 弹性计算 Kubernetes
【阿里云云原生专栏】深入解析阿里云Kubernetes服务ACK:企业级容器编排实战
【5月更文挑战第20天】阿里云ACK是高性能的Kubernetes服务,基于开源Kubernetes并融合VPC、SLB等云资源。它提供强大的集群管理、无缝兼容Kubernetes API、弹性伸缩、安全隔离及监控日志功能。用户可通过控制台或kubectl轻松创建和部署应用,如Nginx。此外,ACK支持自动扩缩容、服务发现、负载均衡和持久化存储。多重安全保障和集成监控使其成为企业云原生环境的理想选择。
786 3