2009-06-13 5 views
4

Comment faire pour compiler une bibliothèque de classes .net 3.5 dans une DLL avec Nant (0.86)?Comment construire une bibliothèque de classes avec Nant

C'est ce que j'ai jusqu'à présent:

Comment puis-je sur le référencement d'un dll système dans le GAC? Cette ligne faite semble fonctionner.

<include name="System.ComponentModel.DataAnnotations.dll"/> 

Ceci est mon script:

<?xml version="1.0"?> 
<project name="MyCorp.Data" default="all"> 

    <property name="debug" value="true" /> 

    <target name="all"/> 

    <target name="clean" description="remove all build products"> 
    <delete dir="build" if="${directory::exists('build')}" /> 
    </target> 

    <target name="init"> 
    <mkdir dir="build" /> 
    </target> 

    <target name="compile" 
      depends="init" 
      description="compiles the application"> 
     <csc target="library" output="build\${project::get-name()}.dll" debug="${debug}"> 
      <sources> 
       <include name="src\MyCorp.Data\**\*.cs" />        
      </sources> 
      <references>       
      <include name="tools\subsonic\subsonic.dll"/> 
      <include name="lib\log4net\log4net.dll"/> 
      <include name="System.ComponentModel.DataAnnotations.dll"/> 
      </references>       
     </csc> 
    </target> 

</project> 

J'obtenu loin en utilisant JP Boodhoos post

Répondre

4

Vous ne pouvez pas référencer les DLL dans le GAC en utilisant NAnt (que je connais), vous devez avoir la DLL physique quelque part (par exemple dans votre projet de dossier lib) et le référencer comme une DLL normale:

<include name="lib\System\System.ComponentModel.DataAnnotations.dll"/> 

Une façon de récupérer une copie d'une DLL GAC consiste à accéder à C: \ Windows \ assembly \ GAC_MSIL à partir d'une invite de commande et à lister le contenu avec dir. Ceci est un répertoire caché de GAC. Si vous trouvez l'assemblage dont vous avez besoin, placez-le dans cd, et vous trouverez des dossiers pour différentes versions .NET (par exemple, 3.5.0.0). cd dans le droit et vous devriez trouver la DLL elle-même que vous pouvez copier. Sur mon ordinateur je l'ai trouvé à:

C: \ Windows \ assembly \ GAC_MSIL \ System.ComponentModel.DataAnnotations \ 3.5.0.0__31bf3856ad364e35

Je pense que si vous utilisez MSBuild à la place csc vous n'avez pas besoin dur références aux DLL GACed, il les trouvera pour vous.

+0

Vraiment? Nant ne peut pas accéder au GAC? – Dan

+0

C'est peut-être une bonne chose, cela rend votre code plus portable - vous ne pouvez pas garantir qui a quoi dans son GAC. Un collègue peut ne pas avoir System.ComponentModel.DataAnnotations, auquel cas il est vissé. –

+1

Ne pensez pas que cet argument s'applique aux DLL système. – Dan

2

@ Dan

Si vous dressez la liste version de .Net vous ciblez? Je suis un nouvel utilisateur de nAnt, et le seul élément que j'ai appris assez rapidement est que la construction de Dll et Executables qui ciblent le framework 3.5SP1 doit être faite en utilisant les 0.86 bêta bits au lieu de la version 0.85 que vous utilisez.

Vous pouvez utiliser 0,85, mais vous devez ensuite appeler des tâches MSBuild et les lier aux fichiers de solution/projet. Cela m'a pris environ une journée de recherche en ligne pour comprendre.

+0

Merci pour cette info utile. Ouais im construire une application 3.5, donc malade besoin de la nouvelle version de Nant – Dan

0

Je n'ai jamais eu de problème avec les DLL de référence NAnt du GAC. Votre ligne devrait fonctionner, je pense réellement qu'il y a probablement quelque chose d'autre qui ne va pas avec votre fichier de construction, mais je devine juste.

est ici lignes d'un de mes fichiers de construction qui fonctionnent très bien:

<references> 
    <include name="System.dll" /> 
    <include name="System.Data.dll" /> 
    <include name="System.XML.dll" /> 
</references> 

Une des e erreurs les plus courantes que je fais habituellement est avec mon et à supposer que NAnt utilise les importations de projets qui sont définis dans le fichier de projet . Pouvez-vous nous dire précisément quelle erreur vous obtenez pendant la compilation? ou si vous obtenez une erreur lors de l'exécution, qu'est-ce que c'est?

Questions connexes