Καλημέρα σας, θα ήθελα να ζητήσω συγνώμη εάν έβαλα την συγκεκριμένη δημοσίευση σε λάθος κατηγορία.
Ασχολούμαι με το NAnt εδώ και λίγες ημέρες και προσπαθώ να κάνω build κάποια απο τα έργα της εταιρείας μου.
Αντιμετωπίζω ένα πρόβλημα που κάτα πάσα πιθανότητα συσχετίζεται με τα resources που χρησιμοποιεί το project και ο τρόπος που ίσως εγώ τα συμπεριλαμβάνω στο build script του NAnt.
Αυτό που ακολουθεί είναι το Build Script.
<?xml version="1.0"?>
<project name="ProjectName" default="all">
<property name="debug" value="true" />
<property name="resgen.exe" value="C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\ResGen.exe" />
<target name="all"/>
<target name="clean" description="remove all build products">
<delete dir="build" if="${directory::exists('build')}" />
</target>
<target name="init" depends="clean">
<mkdir dir="build" />
</target>
<target name="compile" depends="init" description="compiles the application">
<exec program="${resgen.exe}" workingdir=".">
<arg line="c:\ProjectName\ProjectNameDesktop\Properties\Resources.resx c:\ProjectName\ProjectNameDesktop\Properties\Resources.resources /str:cs /useSourcePath" />
</exec>
<exec program="${resgen.exe}" workingdir=".">
<arg line="c:\ProjectName\ProjectNameDesktop\MainForm.resx c:\ProjectName\ProjectNameDesktop\MainForm.resources /useSourcePath" />
</exec>
<csc target="winexe" output="build\ProjectName.exe" debug="${debug}" failonerror="false" win32icon="Images\ProjectNameDesktop\edit.ico">
<sources>
<include name="ProjectNameDesktop\**.cs" />
<include name="ProjectNameDesktop\**\*.cs" />
<exclude name="ProjectNameDesktop\bin" />
<exclude name="ProjectNameDesktop\obj" />
</sources>
<resources dynamicprefix="true" prefix="ProjectName">
<include name="ProjectNameDesktop\**\*.resources" />
<include name="ProjectNameDesktop\**.resources" />
</resources>
<references>
<include name="References\ProjectNameDesktop\*.dll" />
</references>
</csc>
<copy todir="build" flatten="true">
<fileset>
<include name="References\ProjectNameDesktop\*.dll" />
<include name="ProjectNameDesktop\*.xml" />
</fileset>
</copy>
<delete>
<fileset>
<include name="ProjectNameDesktop\**.resources" />
</fileset>
</delete>
</target>
</project>
Ο λόγος που καλώ το ResGen είναι για να μου δημιουργήσει απο το Resources.resx ένα strongly typed resource class ( whatever that means :( ) κάτι το οποίο είδα πως συνηστούν κάποιοι σε αντίστοιχα προβλήματα με resources. Για τώρα δοκιμάζω να βάλω και το MainForm.resx ( το οποίο προφανός είναι από μία φόρμα του project ).
Αρχικά είχα δοκιμάσει να βάλω απλά τα .resx στο <resources/> του csc task, δεν δούλεψε.
Μετά δοκίμασα να βάλω τα .resx στο resgen task του ΝAnt, επίσης δεν δούλεψε.
Το Resources.resx αρχείο περιέχει μόνο εικόνες, και η γραμμή που χτυπάει από το executable που βγάζει το NAnt είναι η συγκεκριμένη,
this.exp3.Image = global::ProjectName.Properties.Resources.box_preferences;
Μερικές φορές με άλλες αλχημίες χτυπάει όταν πάει να πάρει resources από το MainForm.rex στην εξής γραμμή
this.notify1.Icon = ((System.Drawing.Icon)(resources.GetObject("notify1.Icon")));
Αν δεν ήμουν κάπου σαφής συγγνώμη, ρωτήστε και θα διευκρινήσω,
Οποιαδήποτε βοήθεια είναι ευπρόσδεκτη.
Κώστας.