Frage

Normalerweise, wenn ein Build-Skript für C # ich tun sind nur ** / *. Cs für jedes Projekt / DLL zu erstellen. Aber jetzt habe ich eine Situation, wo ich einige CS-Dateien haben, die nicht Teil des Projekts sind aber leben in diesem Verzeichnis (sie sind dort zu Referenzzwecken aus einer anderen Bibliothek). Es ist nicht in der CSPROJ Datei verknüpft, so dass der VS Build funktioniert gut, aber der Nant Build nicht.

Weiß jemand, ob es eine schöne einfache Möglichkeit, die CS- Einträge Herausziehen der betreffenden CSPROJ Datei und die Verwendung diesen als die Liste der Quelldateien nicht zu bauen, als ein allgemeines Wildcard Spiel verwendet wird.

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Jeder besonderer Grund Sie nicht wollen, zu verwenden msbuild nur für die C # build Bit ? Das ist, was ich für meine Protocol Buffers Port zu tun, und es funktioniert gut. Es hat nant-contrib , aber das ist nicht viel von einer Härte.

Auf diese Weise wissen Sie, nur eine Sache zum Laufen bringen müssen, und wissen, es wird die gleiche Art und Weise aufgebaut werden.

Sie können einen Blick auf meine protobuf Port-Build-Datei hier , für Inspiration. Der offensichtliche Nachteil ist, Mono-Unterstützung, aber ich glaube, xBuild verbessert ...

Andere Tipps

Nant hat Unterstützung zum automatischen Aufbau VS-Lösungen, einschließlich csproj Dateien, eine <solution> Aufgabe verwendet wird.

Das neueste unterstützte Lösung Format ist VS 2003.

NAntContrib enthält eine msbuild Aufgabe - Sie können diese beiden Projekte und Lösungen zu bauen verwenden. Hier ist ein Beispiel davon in der Praxis: http://web.archive.org/web/20100913051600/http://codebetter.com/blogs/jeffrey.palermo/archive/2006/08/12/148248.aspx

Sie können das Projekt mit MSBuild über eine Exec Aufgabe bauen stattdessen Compiler des Aufrufens direkt z.B. msbuild project.csproj.

MSBuild ist eine großartige Idee. wenn es jedoch verwaiste Dateien (CS-Dateien nicht in CSPROJ), wird aspnet_compile.exe manchmal fehlschlagen. Um das zu umgehen, schrieb das ich folgendes alle mit * .cs-Dateien zu entfernen, die nicht in der CSPROJ enthalten. So weit so gut, jedes Feedback ist sehr geschätzt.

<project>
 <foreach item="File" property="csprojFile">
 <in>
  <items>
   <include name="source/**/*.csproj" />
  </items>
 </in>
 <do>
  <property name="currentFolder" value="${directory::get-current-directory()}" />
  <property name="csprojParentFolder" value="${directory::get-parent-directory(csprojFile)}" />

  <foreach item="File" property="csFile">
   <in>
    <items>
     <include name="${csprojParentFolder}/**/*.cs"/>
    </items>
   </in>
   <do>

    <property name="csFileRelativePath" value="${string::replace(csFile, csprojParentFolder + '\', '')}" />
    <loadfile property="projFile" file="${csprojFile}" />
    <if test="${not string::contains(projFile, csFileRelativePath)}">
     <echo message="${csprojFile}:  | Missing: ${csFileRelativePath}" />
     <!-- <delete file="${csprojParentFolder + '\' + csFileRelativePath}" /> -->
    </if>
   </do>
  </foreach>

 </do>
 </foreach>
</project>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top