2009-07-29 12 views
2

Je suis juste à la recherche d'une option dans dotnetnuke ou un utilitaire ou un module d'installation de dnn qui pourrait faire l'installateur (paquet .zip) de mon module de bureau dynamique. Au moment où j'essaye de créer le paquet de module par l'intermédiaire de la définition de module d'hôte-> ... Il crée seulement le paquet de ces dossiers qui existent dans ce dossier de module mais je veux qu'il devrait également inclure le DLL et le manuscrit appropriés de base de données, S'il vous plaît guidez-moi comment puis-je inclure Dépend/relavent dll et les fichiers de script.dotnetnuke module installer

Merci, Rapport post

Répondre

5

Je suggère que NAnt être utilisé pour automatiser le processus d'emballage pour chaque module. Cela demande un peu de configuration et de configuration, mais si vous empaquetez des modules fréquemment, vous économiserez beaucoup d'efforts au fil du temps. Cela garantit également que vous construisez régulièrement le paquet de la même manière chaque fois que vous empaquetez votre module.

Étapes:

1) Téléchargez et décompressez NAnt à un emplacement sur votre ordinateur. Je recommande d'utiliser la version 0.86 beta 1 de NAnt.

2) Incorporer NAnt dans Visual Studio comme un "outil externe"

Bill Simser instructs:

  1. Créer un nouvel outil externe en allant dans Outils | Outils externes
  2. Cliquez sur Ajouter pour ajouter un nouvel outil
  3. Donnez-lui un titre de « NAnt »
  4. Naviguez jusqu'à l'emplacement du fichier NAnt.exe où vous avez téléchargé il pour définir le répertoire initial de $ (SolutionDir) (où votre fichier .build réside)
  5. Cliquez sur "Utiliser la fenêtre de sortie"
  6. Cliquez sur OK Dans le menu outils externes

3) Intégrer un script de construction dans votre solution

Par exemple, voici le fichier de construction du module Tell A Friend que j'ai créé. The full source to the module is also available.

Vous devez vérifier que toutes les propriétés initiales sont valides pour votre module. Par exemple, vous souhaiterez certainement modifier les propriétés "project.name", "solution.file" et "project.dll". Mais vous devrez peut-être également modifier d'autres propriétés (Le répertoire des références est un bon candidat, car vous n'avez peut-être pas structuré les assemblys dépendants du module de la même manière sur le système de fichiers).

<?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) Exécutez l'outil externe qui exécute le script de génération et vérifiez votre package.

Autres ressources:

0

Une façon plus simple (sans avoir à apprendre Nant) serait d'utiliser le studio visuel pré-construction et les événements post-construction (voir les propriétés du projet pour votre projet de module).

Vous pouvez également appeler un fichier batch pour effectuer le travail, comme décrit ici: Module Package Builds Revisited.

Espérons que cela aide, Pete.