Page 1 of 2
Compiler Output umleiten
Posted: Wed Dec 18, 2019 7:03 am
by lagraf
Hallo,
wenn ich den Compiler Output einer App in ein anderes Verzeichnis umleite (General / Output folder), dann werden exe und pdb zwar dort generiert, aber wenn ich die App dann aus XIDE starte wird abgebrochen mit der Meldung App funktioniert nicht mehr. Wieso funktioniert das nicht?
Compiler Output umleiten
Posted: Wed Dec 18, 2019 7:32 am
by Chris
Hi!
Maybe there are some other necessary dlls for your app that do not exist in this new folder?
Try starting your app in debug mode (after setting it to 32bit/x86), it shold give you more information when the problem happens.
Compiler Output umleiten
Posted: Wed Dec 18, 2019 7:59 am
by wriedmann
Hallo Franz,
.NET kann leider keine DLLs aus anderen Verzeichnissen aufrufen, außer sie sind im GAC (Global Assembly Cache).
Wenn Du das Exe in einem anderen Verzeichnis haben möchtest, musst Du daher von hand dafür Sorge tragen, dass die DLLs mitkopiert werden.
Das lässt sich in XIDE am besten über "Post Build Events" einstellen.
- postbuild.png (7.02 KiB) Viewed 610 times
Und dieses cmd-File hat bei mir folgenden Inhalt:
Code: Select all
@echo off
set TargetPath=c:cavoworkalpialpionlineDoorConfig
set SourcePath=C:XSharpXIDEProjectsALPI_WPFBinDebug
set Executable=DoorConfiguration
set Dependencies=AlpiControls ConfigLanguage ProdConfigBase rdm.BaseLib rdm.MVVMBase rdm.MVVMControls rdm.MVVMHelper rdm.SQLBase rdm.WPFLib DoorConfig rdm.SQLite DoorConfigModels NCalc Antlr.runtime DotNetZip
replace %SourcePath%%Executable%.exe %TargetPath% /u
replace %SourcePath%%Executable%.pdb %TargetPath% /u
for %%a in ( %Dependencies% ) do (
echo Replacing %%a
replace %SourcePath%%%a.dll %TargetPath%
replace %SourcePath%%%a.pdb %TargetPath%
)
:ende
rem pause
HTH
Wolfgang
Compiler Output umleiten
Posted: Wed Dec 18, 2019 10:03 am
by lagraf
Hallo Wolfgang,
ist das der einfachste Weg, wie man EXE und Daten (DBF, INI, etc) in ein gemeinsames Verzeichnis bekommt oder soll man das EXE unter C:XIDEProjectsProjectnamebindebug lassen und nur die Daten in ein App Verzeichnis legen. In meinen VO Apps verwende ich meist keine Pfadangaben, da ich mir beim Start SetDefault() setze, abhängig davon ob am Entwicklungsrechner oder auf einem Produktivrechner?
Compiler Output umleiten
Posted: Wed Dec 18, 2019 10:10 am
by lagraf
Hi Chris
I think its the problem, Wolfgang said! The EXE Output Folder is not in the GAC, if I start it from C:XIDEProjectsProjectnamebindebug it dows well!
Compiler Output umleiten
Posted: Wed Dec 18, 2019 10:20 am
by wriedmann
Hallo Franz,
ist das der einfachste Weg, wie man EXE und Daten (DBF, INI, etc) in ein gemeinsames Verzeichnis bekommt oder soll man das EXE unter C:XIDEProjectsProjectnamebindebug lassen und nur die Daten in ein App Verzeichnis legen.
das ist Geschmackssache. In meinen ersten Projekten habe ich das Exe samt DLLs immer wegkopiert.
Inzwischen lasse ich die Binaries immer unter bindebug und definiere den Konfigurations-/Datenpfad über eine Ini im bin/debug-Verzeichnis.
Wenn Du mit der XIDE arbeitest, solltest Du auch mein Plugin anschauen - das bringt z.B. auch einen Explorer im bin-Verzeichnis mit:
https://www.riedmann.it/download/XIDE_WR_Plugin.zip
Auf der entsprechenden Seite solltest Du vielleicht mehr Interessantes finden (auch wenn nicht alles topaktuell ist):
https://www.riedmann.it/verschiedenes_xsharp.php
Wolfgang
Compiler Output umleiten
Posted: Thu Dec 19, 2019 10:50 am
by lagraf
Hallo Wolfgang,
ich werde erstmal die EXE belassen, wo der Compiler sie hinlegt. Beim Programmstart setze ich mir dann mit SetDefault() den Ordner für allfällige Files (DBF, INI, etc). Mit #ifdef ... #else ... #endif kann ich diesen dann auch bei Bedarf abhängig vom Compiler VO / X# machen!
Mit Version() habe ich bisher die VO Compiler Version ermittelt, gibt es dafür auch was in X#?
Danke für eure Hilfe!
LG Franz
Compiler Output umleiten
Posted: Thu Dec 19, 2019 11:41 am
by wriedmann
Hallo Franz,
die Variable __VERSION__ sollte das machen:gibt bei mir 2.2.0.0 zurück.
lg
Wolfgang
Compiler Output umleiten
Posted: Thu Dec 19, 2019 1:29 pm
by lagraf
Danke, funktioniert!
Compiler Output umleiten
Posted: Thu Dec 19, 2019 2:07 pm
by Karl-Heinz
Hallo Franz,
Mit dem X# compiler define __XSHARP__ kann man am zwischen VO und X# Code unterscheiden. Da VO diesen define nicht kennt ignoriert der VO compiler den X# spezifischen und der X# compiler den VO spezifischen code.
Code: Select all
function xyz()
...
#ifdef __XSHARP__
spezieller x# code ...
#else
spezieller VO code ...
#endif
...
return
Gruß
Karl-Heinz