Service Fabric 应用程序的根目录

Service Fabric application's root directory

在我的代码中我失败了

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

我立即 window 拨打了 Directory.GetCurrentDirectory() 电话,它指向“work”文件夹而不是“code”我期望的文件夹。

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

所以我的配置文件就在可执行文件旁边,当然找不到了。

现在我想知道解决方案是什么。
因为我还想保留 运行 控制台应用程序,所以我不想实施任何 "if service fabric hosting, then change current directory, ..." 解决方法。

有什么建议吗?我的 .exe.config 文件怎么办(如果我有,如何找到它们)?

Service Fabric 将当前目录设置为 "work" 的原因是什么?这是某种安全机制吗?

您可以 select 在属性中将操作构建为 'content' 和 select 'copy if newer',以便将其复制到输出文件夹。

您可以做一些简单的反射并获取执行程序集所在的文件夹,然后在该位置引用该文件。我成功地为我需要的辅助文件完成了此操作,该文件部署到与我的可执行文件相同的文件夹中。

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

这就是我刚刚将服务清单更改为指向代码的方式

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

将 "Application Debug Mode" 设置为 "Keep Application" 解决了我遇到的类似问题,我的文件没有被复制到本地服务结构上的最终部署区域。

它已设置为 "Refresh Application",在我键入此内容时处于预览状态。但是那个模式没有复制我的 wwwroot 文件夹,所以我的视图引擎(在这种情况下是 Nancy)没有找到我的视图。

右键单击您的服务结构项目 > 属性 > 应用程序 > 应用程序调试模式 > 保留应用程序