Käyttämällä .NET Core 3.1:tä yhden tiedoston konsolisovelluksen julkaisemiseen, joka toimii Linux-järjestelmässä, ohjelmakoodin pääasiallinen toiminta on hyvin yksinkertaista, eliLue konfiguraatiotiedoston tulos ohjelmahakemistosta! Kuitenkin, kun julkaiset yhden tiedoston Linuxille ajettavaksi, se sanoo, ettei tiedostoa löydy.
Testikoodi:
Tulos on seuraava:
AppDomain.CurrentDomain.SetupInformation.ApplicationBase:/var/tmp/.net/root/ImageWatermark/e5snojro.qyv/
Environment.CurrentDirectory:/root/test
AppDomain.CurrentDomain.BaseDirectory:/var/tmp/.net/root/ImageWatermark/e5snojro.qyv/
Kun .NET Core -sovellus julkaistaan yhtenä tiedostona ja ajetaan sitä CentOS-järjestelmässä, ohjelma puretaan itsestään ja vapautetaan/var/tmp/.net/root/ja kutsua hakemistossa julkaistua ohjelmaa, mikä voi myös selittää, miksi ohjelma ei löydä konfiguraatiotiedostoa.
ratkaisu
System.Environment.CurrentDirectorya käyttäen ohjelmapolun lukemiseen, System.Environment.CurrentDirectory saa todellakin nykyisen hakemiston, mutta jos ohjelma A kutsuu ohjelmaa B ja ohjelma B käyttää System.Environment.CurrentDirectorya hakemiston saamiseksi. Tällöin B-ohjelmassa saatu hakemisto ei enää ole se hakemisto, jossa B-sovellus sijaitsee; Siitä tulee hakemisto, jossa A sijaitsee.
|