Compiler Output umleiten

Deutschsprachiges X#-Forum – German language forum

Moderator: wriedmann

lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

Compiler Output umleiten

Post 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?
User avatar
Chris
Posts: 4911
Joined: Thu Oct 08, 2015 7:48 am
Location: Greece

Compiler Output umleiten

Post 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.
Chris Pyrgas

XSharp Development Team
chris(at)xsharp.eu
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Compiler Output umleiten

Post 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
postbuild.png (7.02 KiB) Viewed 644 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
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

Compiler Output umleiten

Post 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?
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

Compiler Output umleiten

Post 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!
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Compiler Output umleiten

Post 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
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

Compiler Output umleiten

Post 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
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Compiler Output umleiten

Post by wriedmann »

Hallo Franz,

die Variable __VERSION__ sollte das machen:gibt bei mir 2.2.0.0 zurück.

lg

Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

Compiler Output umleiten

Post by lagraf »

Danke, funktioniert!
Karl-Heinz
Posts: 774
Joined: Wed May 17, 2017 8:50 am
Location: Germany

Compiler Output umleiten

Post 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
Post Reply