Service Fabric 应用程序的根目录

10

在我的代码中,我失败了

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将当前目录设置为“work”的原因是什么?这是某种安全机制吗?


在这里也遇到了相同的问题,与网站和视图相关。 - user1496062
4个回答

17

我是这样做的,将服务清单更改为指向代码

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

3
“CodeBase” 而不是 “CodePackage”,但是,项目助手没有将这个信息添加到我的服务定义中。 - lapsus
在我的情况下,我将一个网站复制到了一个非网站项目中.. 我通过使用一个有效的模板来创建一个新站点并进行比较找到了它。 - user1496062

1
你可以进行简单的反射并获取执行程序所在的文件夹,然后引用该位置的文件。我成功地为一个需要部署到与我的可执行文件相同的文件夹中的附属文件做到了这一点。
string exePath = System.Reflection.Assembly.GetExecutingAssembly().Location;
string filePath = Path.Combine(Path.GetDirectoryName(exePath), "myfilename.txt");

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

这不是我的问题。配置文件在我预期的位置。我的“当前目录”不在那里。 - lapsus

0
将“应用程序调试模式”设置为“保留应用程序”解决了我遇到的类似问题,即我的文件未被复制到本地服务织物的最终部署区域。
它已经设置为“刷新应用程序”,这是在我输入此内容时的预览模式。但是,该模式没有复制我的wwwroot文件夹,因此我的视图引擎(在这种情况下是Nancy)无法找到我的视图。
右键单击您的服务织物项目>属性>应用程序>应用程序调试模式>保留应用程序

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接