2009-07-29 111 views
2

我只是在dotnetnuke或某個實用程序或dnn的某個安裝程序模塊中尋找一些選項,它可以使我的動態桌面模塊的安裝程序(.zip包)。dotnetnuke模塊安裝程序

當我嘗試通過主機 - >模塊定義創建模塊包時...它只創建那些確實存在於該模塊文件夾中的文件包,但我希望它還應包含相關的DLL和數據庫腳本,請指導我如何包含dependent/relavent dll和腳本文件。

感謝, 報告後

回答

5

我建議NAnt用於自動爲每個模塊封裝工藝。它需要一點點的設置和配置,但是如果你經常打包模塊,隨着時間的推移,它會節省大量的精力。它還可確保您每次打包模塊時始終以相同的方式構建軟件包。

步驟:

1)下載並解壓楠到您的計算機上的某個位置。我建議使用NAnt的0.86 beta 1版本。

2)把南特到Visual Studio作爲一個 「外部工具」

Bill Simser instructs

  1. 通過工具創建一個新的外部工具|外部工具
  2. 單擊添加,添加一個新的工具
  3. 給它「楠」
  4. 瀏覽的所有權,NAnt.exe文件的位置,無論你已經下載了它的初始目錄設置爲$(SolutionDir )(您.build文件所在)
  5. 點擊「使用輸出窗口」
  6. 單擊確定在外部工具菜單

3)把構建腳本到解決方案

作爲一個例子,這裏是我創建的Tell A Friend模塊的構建文件。 The full source to the module is also available.

您需要驗證所有初始屬性對您的模塊有效。例如,您一定要更改「project.name」,「solution.file」和「project.dll」屬性。但是您可能還需要更改其他屬性(引用目錄是一個很好的候選對象,因爲您可能沒有在文件系統上以相同方式構建模塊的相關程序集)。

<?xml version="1.0" encoding="utf-8" ?> 
<project xmlns="http://nant.sf.net/release/0.86-beta1/nant.xsd" name="Engage: Tell A Friend" basedir="." default="package"> 
    <property name="build" value="true" overwrite="false"/> 
    <property name="bin.directory" value="..\..\bin" overwrite="false"/> 
    <property name="project.config" value="release"/> 
    <property name="project.name" value="TellAFriend"/> 
    <property name="solution.file" value="Engage${project.name}.sln"/> 
    <property name="references.directory" value="References"/> 
    <property name="project.dll" value="${bin.directory}\Engage${project.name}.dll"/> 

    <patternset id="content.fileset"> 
    <include name="**/*.ascx" /> 
    <include name="**/*.aspx" /> 
    <include name="**/*.asmx" /> 
    <include name="**/*.resx" /> 
    <include name="**/*.html" /> 
    <include name="**/*.htm" /> 
    <include name="**/*.css" /> 
    <include name="**/*.jpg" /> 
    <include name="**/*.gif" /> 
    <include name="**/*.png" /> 
    <include name="**/*.pdf" /> 
    <include name="**/*.xml"/> 
    <include name="**/*.xsd"/> 
    <exclude name="Licenses/EULA-*.htm"/> 
    <exclude name="ReleaseNotes_*.htm"/> 
    <exclude name="??.??.??.txt" /> 
    <exclude name="_ReSharper.*/**"/> 
    </patternset> 
    <patternset id="source.fileset"> 
    <include name="**/*.js"/> 
    <include name="**/*.cs"/> 
    <include name="**/*.vb"/> 
    <include name="**/*.sln"/> 
    <include name="**/*.csproj"/> 
    <include name="**/*.vbproj"/> 
    <include name="**/*.build"/> 
    <include name="**/*.dnn"/> 
    <include name="**/*.docx"/> 
    </patternset> 

    <target name="build" description="Builds the solution" if="${build}"> 
    <exec program="${environment::get-variable('windir')}\Microsoft.NET\Framework\v3.5\msbuild.exe" failonerror="true"> 
     <arg value="${solution.file}" /> 
     <arg value="/p:Configuration=${project.config}" /> 
     <arg value="/p:Platform=&quot;Any CPU&quot;" /> 
    </exec> 
    </target> 
    <target name="get-version" depends="build" description="Sets the project.version property to the first three numbers from the version of the main assembly for this module"> 
    <property name="version" value="${assemblyname::get-version(assembly::get-name(assembly::load-from-file(project.dll)))}" /> 
    <property name="project.version" value="${string::substring(version,0,string::last-index-of(version,'.'))}" /> 
    </target> 
    <target name="package" depends="get-version" description="Creates packages for this module, one for each three licenses and version of DNN (4 and 5)"> 
    <property name="package.directory" value="package"/> 
    <property name="package.name" value="Resources.zip"/> 
    <property name="package.license" value="Free"/> 
    <property name="includeSource" value="false"/> 

    <call target="setup-package-files"/> 
    <call target="create-resources-zip"/> 
    <call target="create-packages"/> 

    <property name="includeSource" value="true"/> 
    <call target="add-sources-to-resource-zip"/> 
    <call target="create-packages"/> 

    <delete file="${package.directory}\${package.name}" failonerror="false"/> 
    <delete dir="${package.directory}\temp" failonerror="false"/> 

    <call target="project-specific-tasks"/> 
    </target> 
    <target name="create-resources-zip" description="Creates the Resources.zip file for content (Install package) files"> 
    <mkdir dir="${package.directory}" failonerror="false"/> 
    <mkdir dir="${package.directory}/temp" failonerror="false" /> 
    <mkdir dir="${package.directory}/temp/resources" failonerror="false" /> 
    <copy todir="${package.directory}/temp/resources" flatten="false"> 
     <fileset> 
     <patternset refid="content.fileset"/> 
     <exclude name="obj/**"/> 
     <exclude name="${package.directory}/**"/> 
     </fileset> 
    </copy> 

    <zip zipfile="${package.directory}/temp/package/${package.name}"> 
     <fileset basedir="${package.directory}/temp/resources"> 
     <include name="**/*"/> 
     </fileset> 
    </zip> 
    </target> 
    <target name="add-sources-to-resource-zip" description="Adds the files for the Source package to the Resources.zip file"> 
    <copy todir="${package.directory}/temp/resources" flatten="false"> 
     <fileset> 
     <patternset refid="source.fileset"/> 
     <exclude name="obj/**"/> 
     <exclude name="${package.directory}/**"/> 
     </fileset> 
    </copy> 

    <zip zipfile="${package.directory}/temp/package/${package.name}"> 
     <fileset basedir="${package.directory}/temp/resources"> 
     <include name="**/*"/> 
     </fileset> 
    </zip> 
    </target> 
    <target name="setup-package-files" description="Copies common package files to the temp/package directory, and sets version-dependent attributes in the DNN 5 manifest file"> 
    <property name="releaseNotes.file" value="ReleaseNotes_${project.version}.htm"/> 
    <property name="license.file" value="EULA-${package.license}.htm"/> 
    <mkdir dir="${package.directory}/temp/package" failonerror="false"/> 
    <copy todir="${package.directory}/temp/package" flatten="true"> 
     <fileset> 
     <include name="${releaseNotes.file}"/> 
     <include name="??.??.??.txt" /> 
     <include name="ReadMe.txt" /> 
     <include name="**/*.SqlDataProvider"/> 
     <include name="**/*.4.dnn"/> 
     <include name="**/*.5.dnn"/> 
     <include name="Licenses/${license.file}"/> 
     </fileset> 
    </copy> 
    <copy todir="${package.directory}/temp/package/bin" flatten="true"> 
     <fileset> 
     <include name="${project.dll}"/> 
     <include name="${references.directory}/*.dll"/> 
     <exclude name="${references.directory}/DotNetNuke.dll"/> 
     <exclude name="${references.directory}/DotNetNuke.WebUtility.dll"/> 
     <exclude name="${references.directory}/Microsoft.ApplicationBlocks.Data.dll"/> 
     </fileset> 
    </copy> 

    <attrib readonly="false"> 
     <fileset basedir="${package.directory}/temp/package"> 
     <include name="**"/> 
     </fileset> 
    </attrib> 

    <xmlpoke file="${package.directory}/temp/package/Engage${project.name}.5.dnn" value="${license.file}" xpath="dotnetnuke/packages/package/license/@src"/> 
    <xmlpoke file="${package.directory}/temp/package/Engage${project.name}.5.dnn" value="${releaseNotes.file}" xpath="dotnetnuke/packages/package/releaseNotes/@src"/> 
    <xmlpoke file="${package.directory}/temp/package/Engage${project.name}.5.dnn" value="${project.version}" xpath="dotnetnuke/packages/package/@version"/> 
    <xmlpoke file="${package.directory}/temp/package/Engage${project.name}.5.dnn" value="${project.version}" xpath="dotnetnuke/packages/package/components/component[@type='Script']/scripts/script[@type='UnInstall']/version"/> 
    <xmlpoke file="${package.directory}/temp/package/Engage${project.name}.5.dnn" value="${project.version}" xpath="dotnetnuke/packages/package/components/component[@type='Assembly']/assemblies/assembly[version='REPLACED BY NANT']/version"/> 
    <!--<xmlpoke file="${package.directory}/temp/package/Engage${project.name}.4.dnn" value="${project.version}" xpath="dotnetnuke/folders/folder/version"/>--> 
    </target> 
    <target name="create-packages" description="For the given license and type, creates packages for DNN 4 and DNN 5"> 
    <property name="dnn.version" value="4"/> 
    <call target="zip-package"/> 

    <property name="dnn.version" value="5"/> 
    <call target="zip-package"/> 
    </target> 
    <target name="zip-package" description="Zips up the files in the temp/package directory, getting the correct manifest file and using the correct naming convention"> 
    <property name="package.type" value="Install"/> 
    <if test="${includeSource}"> 
     <property name="package.type" value="Source"/> 
    </if> 
    <zip zipfile="${package.directory}/${project.name}_${package.license}_${project.version}_${package.type}_${dnn.version}.zip"> 
     <fileset basedir="${package.directory}/temp/package"> 
     <include name="**/*"/> 
     <exclude name="**/*.4.dnn" if="${dnn.version=='5'}"/> 
     <exclude name="**/*.5.dnn" if="${dnn.version=='4'}"/> 
     </fileset> 
    </zip> 
    </target> 
    <target name="combine-enterprise" description="Combines the Install and Source enterprise packages into one .zip file"> 
    <zip zipfile="${package.directory}/${project.name}_${package.license}_${project.version}_${dnn.version}.zip"> 
     <fileset basedir="${package.directory}"> 
     <include name="${project.name}_${package.license}_${project.version}_Install_${dnn.version}.zip"/> 
     <include name="${project.name}_${package.license}_${project.version}_Source_${dnn.version}.zip"/> 
     </fileset> 
    </zip> 

    <delete file="${package.directory}/${project.name}_${package.license}_${project.version}_Install_${dnn.version}.zip" failonerror="false"/> 
    <delete file="${package.directory}/${project.name}_${package.license}_${project.version}_Source_${dnn.version}.zip" failonerror="false"/> 
    </target> 
    <target name="project-specific-tasks" description="Place tasks specific to the current project in this task"> 
    </target> 
</project> 

4)運行執行構建腳本的外部工具,並驗證你的包。

其他資源:

0

更簡單的方法(即不必學習南特)是使用Visual Studio的預生成和後生成事件(請參閱您的模塊項目的項目屬性)。

您也可以調用批處理文件來完成這項工作,如下所述: Module Package Builds Revisited

希望這會有所幫助, 皮特。