4 Stimmen

Wie man eine Klassenbibliothek mit Nant erstellt

Wie kann ich eine .net 3.5-Klassenbibliothek mit Nant (0.86) in eine DLL kompilieren?

Dies ist mein bisheriger Stand:

Wie referenziere ich eine System-DLL in der GAC? Diese Zeile scheint zu funktionieren.

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

Dies ist mein Skript:

<?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>

Ich bin so weit gekommen, indem ich JP Boodhoos Beitrag

4voto

James Allen Punkte 5240

Sie können DLLs im GAC nicht mit NAnt referenzieren (soweit ich weiß), Sie müssen die physische DLL irgendwo haben (z.B. in Ihrem Projekt-Lib-Ordner) und sie wie eine normale DLL referenzieren:

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

Eine Möglichkeit, eine Kopie einer GAC-DLL zu erhalten, ist der Aufruf von cd C:\Windows\assembly\GAC_MSIL von einer Eingabeaufforderung aus, und listen Sie den Inhalt mit dir. Dies ist ein verstecktes GAC-Verzeichnis. Wenn Sie die benötigte Assembly finden, wechseln Sie in dieses Verzeichnis und Sie werden Ordner für verschiedene .NET-Versionen finden (z. B. 3.5.0.0). Wechseln Sie in das richtige Verzeichnis und Sie sollten die DLL selbst finden, die Sie herauskopieren können. Auf meinem Computer fand ich sie unter:

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

Ich denke, wenn Sie MSBuild anstelle von csc verwenden, benötigen Sie keine harten Verweise auf GACed DLLs, es wird sie für Sie finden.

2voto

Richard B Punkte 1581

@Dan

Könnten Sie bitte angeben, welche Version von .Net Sie verwenden? Ich bin ein neuer nAnt-Benutzer, und das eine Element, das ich ziemlich schnell gelernt ist, dass Gebäude Dll's und ausführbare Dateien, die das 3.5SP1-Framework zielen muss mit der 0.86 Beta-Bits anstelle der 0.85 Version Sie auf getan werden.

Sie können 0.85 verwenden, aber dann müssen Sie MSBuild-Aufgaben aufrufen und eine Verknüpfung zu den Projektmappen/Projektdateien herstellen. Dies nahm mich etwa einen Tag der Suche online herauszufinden.

0voto

Brian G Swanson Punkte 1039

Ich hatte noch nie Probleme mit NAnt, das DLLs aus dem GAC referenziert. Ihre Zeile sollte funktionieren, ich würde eigentlich denken, es ist wahrscheinlich etwas anderes falsch mit Ihrer Build-Datei, aber ich bin nur Vermutungen.

Hier sind Zeilen aus einer meiner Build-Dateien, die einwandfrei funktionieren:

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

Einer der häufigsten Fehler, die ich typischerweise mache, ist, dass ich annehme, dass NAnt die Projektimporte verwendet, die in der Projektdatei definiert sind.

Können Sie uns genau sagen, welche Fehler Sie während der Kompilierung erhalten? oder wenn Sie einen Fehler zur Laufzeit erhalten, was ist es?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X