【问题标题】:Service Fabric application's root directoryService Fabric 应用程序的根目录
【发布时间】:2017-02-05 07:34:29
【问题描述】:

在我的代码中我失败了

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

在即时窗口中,我拨打了Directory.GetCurrentDirectory() 的电话,它指向“work”文件夹,而不是我本来应该拥有的“code”文件夹预计。

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

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

现在我想知道解决方案是什么。
由于我还想继续运行控制台应用程序,因此我不想实现任何“如果服务结构托管,则更改当前目录,...”解决方法。

有什么建议吗?我的 .exe.config 文件呢(如果有的话,如何找到)?

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

【问题讨论】:

  • 与网站和视图相同的问题..

标签: azure-service-fabric


【解决方案1】:

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

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

【讨论】:

  • "CodeBase" 而不是 "CodePackage" 但是是的 - 不知何故,项目助理没有将此信息添加到我的服务定义中。
  • 在我的例子中,我将一个网站复制到了一个非网络项目中。我通过一个新网站从模板中找到了它,该网站可以正常工作并进行比较。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    您可以选择构建操作作为“内容”并在属性中选择“如果较新则复制”,以便将其复制到输出文件夹。

    【讨论】:

    • 这不是我的问题。配置文件是我期望它们所在的位置。我的“当前目录”不是。
    【解决方案4】:

    将“应用程序调试模式”设置为“保留应用程序”解决了我遇到的一个类似问题,即我的文件没有被复制到本地服务结构上的最终部署区域。

    它已设置为“刷新应用程序”,在我键入此内容时处于预览状态。但是那个模式并没有复制我的 wwwroot 文件夹,所以我的视图引擎(在本例中为 Nancy)没有找到我的视图。

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

    【讨论】:

      猜你喜欢
      • 2020-01-29
      • 2016-11-23
      • 2016-07-26
      • 2016-09-29
      • 1970-01-01
      • 2019-06-05
      • 2021-09-14
      • 2017-09-12
      • 2019-05-10
      相关资源
      最近更新 更多