När jag kör mitt program så får jag följande felmeddelande, jag får det dock inte när jag kompilerar i vs.net antagligen pga vs.net lägger alla assemblys i samma katalog. Ingen som har någon som helst ide? Jag är något desperat, så har ni någon som helst aning släng in det här... Varför vill du ha dina dller i en annan katalog. Visst jag kan lägga alla assemblys i samma katalog men... det är inte snyggt... Jag menar det kan ju inte vara så att det inte går att ha assemblys som använder varandra i olika kataloger, jag menar alla har sina egna preferenser när det gäller katalogstuktur. Allteftersom som projekten blir större så blir det lätt oöversiktligt om man lägger allt i samma katalog... Löste det själv, tricket var att kolla hur .net hittar assemblys vilket står beskrivet ganska bra i hjälpen. Det finns flera sätt att lösa det på men så här gjort jag. Jag skapade en fil vid namn "jsfr.exe.config" och lade den i samma katalog som jsfr.exe, sedan skrev jag det här i filen:Assembly not found...
<code>
An unhandled exception of type 'System.IO.FileNotFoundException' occurred in jsfr.exe
Additional information: File or assembly name jsfr.core, or one of its dependencies, was not found.
</code>
Felet uppstår istället när jag bygger projektet med hjälp av nant (nant.sourceforge.net/), katalogstrukturen som jag bygger upp med nant ser ut så här:
<code>
/build
/lib
-jsfr.core.dll
-jsfr.gui.controls.dll
-jsfr.exe
</code>
Det finns flera dll-filer i lib katalogen men jsfr.exe klarar inte att lokalisera någon av dem. Så här ser kompileringen av jsfr.exe ut i nant (observera att kompileringen fungerar utmärkt):
<code>
<csc target="winexe" output="${exe.main}" debug="${debug}" win32icon="App.ico">
<references>
<includes name="${dll.core}" />
<includes name="${dll.gui.controls}" />
</references>
<sources>
<includes name="src\*.cs" />
</sources>
</csc>
</code>
och så här ser definitionerna ut:
<code>
<property name="build.dir" value="${nant.project.basedir}/build" />
<property name="lib.dir" value="${build.dir}/lib" />
<property name="exe.main" value="${build.dir}/jsfr.exe" />
<property name="dll.core" value="${lib.dir}/jsfr.core.dll" />
<property name="dll.gui.controls" value="${lib.dir}/jsfr.gui.controls.dll" />
</code>
Det verkar som att jsfr.exe inte hittar en assembly som inte ligger i samma katalog som sig själv (eftersom det fungerar när vs.net bygger det och den ända skillnaden är att alla assemblys ligger i samma katalog) men hur får man jsfr.exe att hitta dll filerna i lib-katalogen?
Det finns en tag man kan lägga till csc i nant för att definiera att den ska leta i andra kataloger (lib) men jag får tyvärr inte det att fungera med den heller, några ideer vad som kan vara fel?Sv: Assembly not found...
Sv: Assembly not found...
Själva kärnan med .NET är att exe och dller skall ligga i samma katalog. Det är då inte så konstigt att det inte funkar!
Är det så att du vill ha ett kodbibliotek som alla dina program använder, så skall du titta på GAC (Global Assembly Cache) som används till det (jag tror) du vill göra. rekommendationen är att du INTE använder GAC ändå, för det blir bara elände med versionshantering av dina dller.
Lägg alla dller i samma mapp som din exe, då har du ett .NET assembly!
/mickeSv: Assembly not found...
Sv: Assembly not found...
<code>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="lib"/>
</assemblyBinding>
</runtime>
</configuration>
</code>
En annan sak jag upptäckte, när du compilerar windowsapplicationer i nant så får du inte glömma att lägga till resurserna i csc.