2016-09-27 34 views
4

在我的代碼我無法在服務織物應用程序的根目錄

if (!File.Exists(_configurationFileName)) {...} 

在不久的窗口,我打了一個電話給Directory.GetCurrentDirectory(),它向我指出了「工作」文件夾中,而不是「代碼 「我會預期的文件夾。

Directory.GetCurrentDirectory() 
"C:\\SfDevCluster\\Data\\_App\\_Node_0\\My.Application.Type_App2\\work" 

所以我的配置文件坐在可執行文件旁邊當然沒有找到。

現在我想知道解決方案是什麼。
因爲我還想繼續運行控制檯應用程序,所以我不想實施任何「如果服務結構託管,然後更改當前目錄...」的解決方法。

有什麼建議嗎?我的.exe.config文件怎麼樣(如果我有,它們將如何被發現)?

Service Fabric設置當前目錄爲「工作」的原因是什麼?這是一種安全機制嗎?

+0

同樣的問題與網站和看法.. – user1496062

回答

7

這是怎麼了我只是做了它的代碼

<EntryPoint> 
    <ExeHost> 
    <Program>configui.exe</Program> 
    <WorkingFolder>CodePackage</WorkingFolder> 
    </ExeHost> 
</EntryPoint> 
+2

「CodeBase」而不是「CodePackage」,但是 - 不知何故,項目助理沒有將這些信息添加到我的服務定義中。 – lapsus

+0

在我的情況下,我複製了一個網絡到一個非網絡項目..我發現它從一個新的網站從模板工作和做比較。 – user1496062

0

您可以選擇構建操作作爲「content」,並在屬性中選擇「copy if newer」,以便將其複製到輸出文件夾。

+0

這不是我的問題。配置文件是我期望它們的地方。我的「當前目錄」不是。 – lapsus

0

你可以做一些簡單的反射並獲得正在執行的程序集所在的文件夾,然後在該位置引用該文件。我成功地爲我需要的輔助文件成功部署到與我的可執行文件相同的文件夾。

string exePath = System.Reflection.Assembly.GetExecutingAssembly().Location; 
string filePath = Path.Combine(Path.GetDirectoryName(exePath), "myfilename.txt"); 
0

設置「應用程序調試模式」爲「Keep應用程序」更改艙單點的服務解決了類似的問題,我在哪裏我文件未被複制到本地服務結構上的最終部署區域。

它已被設置爲「刷新應用程序」,它在預覽中,我輸入這個。但是該模式並沒有複製我的wwwroot文件夾,所以我的視圖引擎(南希在這種情況下)沒有找到我的意見。

右鍵點擊你的服務織物項目>屬性>應用程序>應用程序調試模式>留住應用