我在Windows上找到了許多與 .NET Core 3.1 和 .NET 5.0 相關的答案,但到目前為止,在使用單檔案可執行檔案時,一直無法找到如何在Linux上的 .NET Core 下獲取原始程式集位置。鑒于系統的行為不同,我認為這可能是 .NET 5 中的一個錯誤,但同時我需要一個解決方法。請注意,在我的場景中,當前目錄不是原始可執行檔案所在的位置,即使我不更改它,我也無法控制它(無論如何這是一個黑客 - 當前目錄的目的完全是不同的)。這是在這種情況下測驗程式的實際輸出,其中包含迄今為止我能夠找到的所有其他帖子中建議的屬性和函式:
Directory.CurrentDirectory()=/home/ec2-user/source
typeof(Program).Assembly.Location=/root/.net/Test/jwaxs3pc.bdp/Test.dll
typeof(Program).Assembly.GetFiles() [0].Name=/root/.net/Test/jwaxs3pc.bdp/Test.dll
typeof(Program).Assembly.GetName().CodeBase=file:///root/.net/Test/jwaxs3pc.bdp/Test.dll
AppContext.BaseDirectory=/root/.net/Test/jwaxs3pc.bdp/
Directory.GetParent(System.Reflection.Assembly.GetExecutingAssembly().Location).FullName=/root/.net/Test/jwaxs3pc.bdp
我需要找到原始代碼位置,而不是單檔案可執行檔案解壓到的位置。我如何獲得這些最基本的資訊?是否沒有平臺和獨立于設定的方式來做到這一點(真的應該有)?
uj5u.com熱心網友回復:
當您將應用程式發布為單個可執行檔案時,某些與 Assembly 相關的 API 將無法運行,這不是錯誤。
它記錄在這里:https : //docs.microsoft.com/en-us/dotnet/core/deploying/single-file#api-incompatibility
您將在該表中看到在Assembly.Location單個可執行檔案中運行時將始終回傳空字串。正如該檔案中所建議的,您可以呼叫Environment.GetCommandLineArgs()并評估字串陣列結果中第一項的值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/323422.html
上一篇:c#-每次創建物件時如何將物件值添加到串列<>并在最后列印串列
下一篇:我有一個(x,y)坐標(int8_t)并且需要在C中相對于(0,0)將它們旋轉“x”度(無法訪問浮點數或數學庫)
