缺少 .NET Nancy 自托管配置文件

.NET Nancy self hosting configuration files missing

我正在使用 Nancy 自托管功能进行一些单元测试。从我的单元测试项目(与 nancy API 项目分开),我使用以下代码创建我的 API:

的实例
var myApp = new NancyHost(new Uri(MockRestApiUrl), new Bootstrapper(), new HostConfiguration() { UrlReservations = new UrlReservations { CreateAutomatically = true } });

在 Bootstrapper 中,我有一些代码可以查找一组配置文件以预加载到内存中。请注意,这些不是要提供的静态文件,而是驱动 API 配置的文件。

我遇到的问题是 Bootstrapper 生成异常,因为它无法找到它正在寻找的配置文件。我通过 RootPathProvider.GetRootPath() 设置配置文件路径并得到:

C:...\AppData\Local\Temp\b3f2483d-8c40-45d8-8ba3-dd8db2b9bfd3\b3f2483d-8c40-45d8-8ba3-dd8db2b9bfd3\assembly\dl3\bf80d16d\b3b00d8e_bd91d201\Mapping\PropertyMapping.json

当我查看文件夹时,Mapping 文件夹和配置文件丢失了。我尝试将它们标记为 'Content' 和 'Copy Always' in Visual Studio 并多次清理我的解决方案,但没有成功。如何将这些文件复制到自托管站点?

我仍然不知道为什么我的模块中注入的路径提供程序给我一个“...AppData...”路径。但是,我确实按如下方式解决了它:

public class SelfHostRootPathProvider : IRootPathProvider
{
    public string GetRootPath()
    {
        return AppDomain.CurrentDomain.BaseDirectory;
    }
}

并且在从我的应用程序的 Bootstrapper 派生的 class 上:

public class IntegrationBootstrapper : Bootstrapper
{
    protected override IRootPathProvider RootPathProvider
    {
        get { return new SelfHostRootPathProvider(); }
    }
}

如果你需要实例化:

        var myApp = new NancyHost(new Uri(ServiceUrl), new IntegrationBootstrapper(), new HostConfiguration() { UrlReservations = new UrlReservations { CreateAutomatically = true } });

这解决了我的单元测试项目的调试文件夹的路径。然后我必须确保任何配置文件都被 linked 到我的单元测试项目(添加 -> 现有项目 -> 添加为 link)并设置为内容/始终复制 Visual Studio 在这两个项目中。