Build übers Studio funktioniert - Build mit NAnt funktioniert nicht

SixDark

Erfahrenes Mitglied
Hi @all!

Ich habe ein Problem mit NAnt. Und zwar versuche ich seit Tagen meine Solution zu builden. Leider funktioniert ja NAnt nicht mit 2005er Solution-Files. Also habe ich es so geschrieben, dass die CS-Files einzeln gebuildet werden. Ein Hauptfile, welches die 4 Build-Files (es hat 4 Projekte in einer Solution) für die Projekte der Reihe nach aufruft. Am Ende erscheint auch das ersehnte "BUILD SUCCEEDED", aber weit gefehlt, denn wenn ich mein Windows-Test-Programm aufrufe, dann bekomme ich einen Fehler (nur zur Info: die Anwendung besteht aus einem Interface, einer Implementation dazu, einem Windows-Dienst und einer WinForms-Testanwendung). Wenn ich das Ganze mit dem Studio builde, dann funktioniert es wunderbar. Wer kann mir sagen, was ich da falsch mache. Hier mal die Build-Files:

Code:
<project name="ServerFunctions" default="build" basedir=".">
  <description>ServerFunctions.</description>
  <property name="debug" value="true" overwrite="false" />
  <target name="clean" description="remove all generated files">
    <delete file="bin/Debug/*.dll" failonerror="false" />
    <delete file="bin/Debug/*.pdb" failonerror="false" />
  </target>

  <vssget
		username="Six Dark"
		password=""
		localpath="F:\Projekte\VisualC#\2005\ShiftData.ResourceChecker.Service\ServerFunctions"
		recursive="true"
		replace="true"
		writable="true"
		dbpath="F:\VSS_Safe\srcsafe.ini"
    path="$/ServerFunctions"
	/>

  <target name="build" description="compiles the source code">
    <csc target="library" output="bin/Debug/ServerFunctions.dll" debug="${debug}">
      <sources>
        <include name="ServerFunctions.cs" />
        <include name="../ShiftData.ResourceChecker.Interfaces/IServerFunctions.cs" />
      </sources>
      <references>
        <include name="System.dll" />
        <include name="System.Data.dll" />
        <include name="System.Management.dll" />
        <include name="System.Runtime.Remoting.dll" />
        <include name="System.Xml.dll" />
        <include name="ShiftData.ResourceChecker.Interfaces.dll" />
      </references>
    </csc>

    <copy
    file="F:/Projekte/VisualC#/2005/ShiftData.ResourceChecker.Service/ServerFunctions/bin/Debug/ServerFunctions.dll"
    todir="F:/Projekte/VisualC#/2005/ShiftData.ResourceChecker.Service/ShiftData.ResourceChecker.Service.Test/bin/Debug/"
    verbose="true"
    overwrite="true"
  />

    <copy
      file="F:/Projekte/VisualC#/2005/ShiftData.ResourceChecker.Service/ServerFunctions/bin/Debug/ServerFunctions.pdb"
      todir="F:/Projekte/VisualC#/2005/ShiftData.ResourceChecker.Service/ShiftData.ResourceChecker.Service.Test/bin/Debug/"
      failonerror="false"
      verbose="true"
      overwrite="true"
  />

  </target>
</project>


Code:
<project name="IServerFunctions" default="build" basedir=".">
        <description>IServerFunctions.</description>
        <property name="debug" value="true" overwrite="false" />
        
        <target name="clean" description="remove all generated files">
            <delete file="bin/Debug/*.dll" failonerror="false" />
            <delete file="bin/Debug/*.pdb" failonerror="false" />
        </target>

        <vssget
          username="Six Dark"
          password=""
          localpath="F:/Projekte/VisualC#/2005/ShiftData.ResourceChecker.Service/ShiftData.ResourceChecker.Interfaces"
          recursive="true"
          replace="true"
          writable="true"
          dbpath="F:\VSS_Safe\srcsafe.ini"
          path="$/ShiftData.ResourceChecker.Interfaces"
	      />


  <target name="build" description="compiles the source code">
    <csc target="library" output="bin/Debug/ShiftData.ResourceChecker.Interfaces.dll" debug="${debug}">
      <sources>
        <include name="**/*.cs" />
      </sources>
      <references>
        <include name="System.dll" />
        <include name="System.Data.dll" />
        <include name="System.Xml.dll" />
      </references>
    </csc>


    <copy
      file="F:/Projekte/VisualC#/2005/ShiftData.ResourceChecker.Service/ShiftData.ResourceChecker.Interfaces/bin/Debug/ShiftData.ResourceChecker.Interfaces.dll"
      todir="F:/Projekte/VisualC#/2005/ShiftData.ResourceChecker.Service/ServerFunctions/bin/Debug/"
      verbose="true"
      overwrite="true"
  />

    <copy
      file="F:/Projekte/VisualC#/2005/ShiftData.ResourceChecker.Service/ShiftData.ResourceChecker.Interfaces/bin/Debug/ShiftData.ResourceChecker.Interfaces.pdb"
      todir="F:/Projekte/VisualC#/2005/ShiftData.ResourceChecker.Service/ServerFunctions/bin/Debug/"
      failonerror="false"
      verbose="true"
      overwrite="true"
  />


    <copy
      file="F:/Projekte/VisualC#/2005/ShiftData.ResourceChecker.Service/ShiftData.ResourceChecker.Interfaces/bin/Debug/ShiftData.ResourceChecker.Interfaces.dll"
      todir="F:/Projekte/VisualC#/2005/ShiftData.ResourceChecker.Service/ShiftData.ResourceChecker.Service/bin/Debug/"
      verbose="true"
      overwrite="true"
  />

    <copy
      file="F:/Projekte/VisualC#/2005/ShiftData.ResourceChecker.Service/ShiftData.ResourceChecker.Interfaces/bin/Debug/ShiftData.ResourceChecker.Interfaces.pdb"
      todir="F:/Projekte/VisualC#/2005/ShiftData.ResourceChecker.Service/ShiftData.ResourceChecker.Service/bin/Debug/"
      failonerror="false"
      verbose="true"
      overwrite="true"
  />


  <copy
      file="F:/Projekte/VisualC#/2005/ShiftData.ResourceChecker.Service/ShiftData.ResourceChecker.Interfaces/bin/Debug/ShiftData.ResourceChecker.Interfaces.dll"
      todir="F:/Projekte/VisualC#/2005/ShiftData.ResourceChecker.Service/ShiftData.ResourceChecker.Service.Test/bin/Debug/"
      verbose="true"
      overwrite="true"
  />

    <copy
      file="F:/Projekte/VisualC#/2005/ShiftData.ResourceChecker.Service/ShiftData.ResourceChecker.Interfaces/bin/Debug/ShiftData.ResourceChecker.Interfaces.pdb"
      todir="F:/Projekte/VisualC#/2005/ShiftData.ResourceChecker.Service/ShiftData.ResourceChecker.Service.Test/bin/Debug/"
      failonerror="false"
      verbose="true"
      overwrite="true"
  />
  </target>
</project>


Code:
<project name="ShiftDataResourceChecker.Service.Test" default="build" basedir=".">
    <property name="basename" value="ShiftData.ResourceChecker.Service" />
    <property name="debug" value="true" />
    <property name="build1.dir" value ="bin" />
    <property name="build.dir" value="bin/Debug" />

    <target name="clean" description="cleans build directory">
	      <delete dir="${build1.dir}" verbose="true" if="${directory::exists(build1.dir)}" />
        <delete dir="${build.dir}" verbose="true" if="${directory::exists(build.dir)}" />
    </target>

    <target name="debug" depends="clean">
        <property name="debug" value="true" />
    </target>

    <target name="release" depends="clean">
        <property name="debug" value="false" />
    </target>

    <target name="build">
        <mkdir dir="${build.dir}"/>
        <csc target="exe" output="${build.dir}/${basename}.exe" debug="${debug}">
            <sources>
                <include name="**/*.cs" />
		            <include name="../ShiftData.ResourceChecker.Interfaces/IServerFunctions.cs" />
		            <include name="../ServerFunctions/ServerFunctions.cs" />
            </sources>
          <references>
            <include name="System.dll" />
            <include name="System.Data.dll" />
            <include name="System.Configuration.Install.dll" />
            <include name="System.Runtime.Remoting.dll" />
            <include name="System.Xml.dll" />
            <include name="System.ServiceProcess.dll" />
            <include name="ShiftData.ResourceChecker.Interfaces.dll" />
            <include name="ServerFunctions.dll" />
          </references>
        </csc>
    </target>
</project>


Code:
<project name="ShiftDataResourceChecker.Service.Test" default="build">
    <property name="basename" value="ShiftData.ResourceChecker.Service.Test"/>
    <property name="debug" value="true"/>
    <property name="build.dir" value="bin/Debug"/>

    <target name="clean" description="cleans build directory">
        <delete dir="${build.dir}" verbose="true" if="${directory::exists(build.dir)}" />
    </target>

    <target name="debug" depends="clean">
        <property name="debug" value="true" />
    </target>

    <target name="release" depends="clean">
        <property name="debug" value="false" />
    </target>

    <target name="build">
        <mkdir dir="${build.dir}"/>
        <csc target="winexe" output="${build.dir}/${basename}.exe" debug="${debug}" 
                main="ShiftData.ResourceChecker.Service.Test.Program">
            <sources>
                <include name="**/*.cs" />
                <include name="../ShiftData.ResourceChecker.Interfaces/IServerFunctions.cs" />
            </sources>
            <references>
                <include name="System.dll" />
		            <include name="System.Deployment.dll" />
                <include name="System.Data.dll" />
                <include name="System.Drawing.dll" />
                <include name="System.Windows.Forms.dll" />
		            <include name="System.Runtime.Remoting.dll" />
                <include name="System.Xml.dll" />
                <include name="ShiftData.ResourceChecker.Interfaces.dll" />
            </references>
        </csc>
    </target>
</project>

Ich weiß, das ist etwas viel auf einmal, aber ich hab schon alles ausprobiert - ich weiß nicht mehr weiter...
Auf Arbeit habe ich mittlerweile 6 komplette Solutions (teilweise mit mehr als 10 Projekten drin), die laufen über CruiseControl und NAnt super, aber bei meiner hier zu Hause will das nicht klappen...

Ich hoffe Ihr könnt mir helfen.
Vielen vielen Dank schon mal...

MfG
..::SD::..
 
Ich hab mir deine Files jetzt nicht angesehen, da ich leider dafür im Moment keine Zeit hab (vielleicht etwas später), aber dafür möchte ich etwas in den Raum werfen:

Was spricht dagegen die Builds mit MSBUILD zu machen? Wenn es ohnehin 2005er Solutions sind und bekanntlich NAnt diese nicht unterstützt und VS2005 selbst MSBuild dafür verwendet, würde dies naheliegen. Und im Endeffekt kannst das gleiche abbilden wie unter NAnt auch. Und das funktioniert auch mit CruiseControl.

Just an idea.
 
Hallo Norbert,

ich werde mir (wie schon einmal) Deinen Rat zu Herzen nehmen und die Sachen mal mit MSBuild ausprobieren. Ich hab grad auf Arbeit überlegt, ob ich es auch mit devenv machen könnte, aber erst probiere ich MSBuild.

Ich werde berichten.

Viele Grüsse
..::SD::..
 
Ja, könntest du auch mit devenv machen (hat entsprechende CommandLine-Parameter, mit denen das funktioniert). Allerdings muss eben Visual Studio installiert sein. MSBuild wäre die unabhängigere Variante.

Code:
Command line builds:
devenv solutionfile.sln  /build solutionconfig [ /project projectnameorfile [ /p
rojectconfig name ] ]

Available command line switches:

/build          build the specified solution configuration
/project        specifies the project to build instead of solution
                must specify /build to use /project
/projectconfig  specifies project configuration to build
                must specify /project to use /projectconfig
/out            write build output to specified file
/rebuild        like /build but forces a clean first
/clean          clean up build outputs
/deploy         build the specified solution configuration and then deploy it
/run            run the specified solution configuration
/runexit        run the specified solution configuration and then terminate
/command        executes the specified internal command line after startup
/mditabs        use tabbed documents interface
/mdi            use MDI interface
/fn             use specified font name
/fs             use specified font size
/LCID           use specified language ID
/noVSIP         disables VSIP developers license key for VSIP testing
/safemode       only default environment and services load for stability
/resetskippkgs  allow VsPackages once flagged for loading failures to
                load again
/migratesettings migrate some user settings from another version

Product-specific switches:

/debugexe       Open the specified executable to be debugged. The
                remainder of the command line is passed to this
                executable as its arguments.
/useenv         Use PATH, INCLUDE, LIBPATH, and LIB environment variables
                instead of IDE paths for VC++ builds.

To attach the debugger from the command line, use:
        vs7jit.exe -p <pid>
 
Hallo Norbert,

Endlich bin ich dazu gekommen das Ganze mal umzubauen...
Mit MSBuild funktioniert es super - also bleibt devenv in der Ecke ;-) .

Aber ich muss sagen, die Sache mit NAnt, CruiseControl.NET, MSBuild, NDoc etc. ist heftiger als ich dachte. Eh man CC.NET dazu bringt bestimmte Sachen zu machen, brauchts ewig. Und wenn man Unit-Tests einbinden möchte, die eine Config-Datei benötigen, wirds erst recht haarig. Aber auch das krieg ich irgendwann noch geregelt...

Viele Grüsse und schönes Wochenende!
..::SD::..
 
MSBuild und CruiseControl

Hallo!

Hat hier schonmal jemand MSBuild unter CruiseControl zum Laufen bekommen.
Ich versuch' es schon seit einigen Tagen, Versionsverwaltung hab' ich zum Laufen bekommen. Aber beim MsBuild-Task kriege aber immer eine Fehlermeldung:

Code:
Überprüfen Sie Folgendes:
1.) Der angegebene Protokollierungsname entspricht dem Namen der Protokollierungsklasse.
2.) Die Protokollierungsklasse ist "public" und implementiert die Microsoft.Build.Framework.ILogger-Schnittstelle.
3.) Der Pfad der Protokollierungsassembly ist richtig, oder die Protokollierung kann nur mit dem angegebenen Assemblynamen geladen werden.
Schalter: ThoughtWorks.CruiseControl.MsBuild.XmlLogger,C:\Programme\CruiseControl.NET\server\ThoughtWorks.CruiseControl.Core.dll;C:\Programme\CruiseControl.NET\server\Dienstplaner\Artifacts\msbuild-results.xml

Ich kann mit der Fehlermeldung leider überhaupt nichts anfangen.
In der letzten .dotnet-Ausgabe war auch ein kurzer Bericht darüber, die haben aber leider auch nur oberflächlich beschrieben, was alles möglich ist.

Ich hoffe, mir kann jemand helfen.
 

Neue Beiträge

Zurück