南希自我主机和静态内容文件

时间:2014-07-07 13:48:00

标签: c# console-application nancy self-hosting

我是否正确地认为,如果您创建一个自我主机南希控制台应用程序并想要提供html,javascript和css文件,您必须通过所有这些文件(可能是相当多的)并将它们全部标记为复制到输出目录。

public class HomeModule : NancyModule
{
    public HomeModule()
    {

        Get["/"] = v =>  View["index.html"];
    }
}

如果index.html文件位于项目文件夹中并且未在其属性上标记为copy to output,则无法找到。

3 个答案:

答案 0 :(得分:2)

编辑:我纠正了,我误解了这个问题。

是的,您需要设置要复制的所有静态内容,但是当我设置我的项目时(我暂时无法为您复制粘贴示例),我只是在项目文件中添加了构建事件,或者我设置了CI /部署的构建任务。


不,您不需要单独标记每个文件。

https://github.com/NancyFx/Nancy/wiki/Managing-static-content

您可以标记整个目录。

或者,如果您使用的是OWIN,则可以使用静态内容中间件。

类似的东西:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        var fileSystem = new FileServerOptions
        {
            EnableDirectoryBrowsing = false,
            FileSystem = new PhysicalFileSystem("....")
        };

        app.UseFileServer(fileSystem);
        app.UseNancy();
    }
}

答案 1 :(得分:2)

我遇到了同样的问题,我找到了其他人可能会觉得有用的解决方法:

我没有将文件复制到每个构建的输出目录,而是在其中创建了一个directory junction,目标是原始的静态文件目录。

这允许在Visual Studio中实时编辑静态内容(无需重建以将编辑后的文件复制到输出目录)

e.g。 (构建后命令行):

if not exist "$(TargetDir)Web" md "$(TargetDir)Web"
if not exist "$(TargetDir)Web\Content" mklink /j "$(TargetDir)Web\Content" "$(ProjectDir)Content" 
if not exist "$(TargetDir)Web\Scripts" mklink /j "$(TargetDir)Web\Scripts" "$(ProjectDir)Scripts" 
if not exist "$(TargetDir)Web\Fonts" mklink /j "$(TargetDir)Web\Fonts" "$(ProjectDir)Fonts" 
if not exist "$(TargetDir)Web\Static" mklink /j "$(TargetDir)Web\Static" "$(ProjectDir)Web\Static" 

答案 2 :(得分:0)

Visual studio build events

您可以使用Visual Studio构建事件并添加xcopy命令,如下所示:

xcopy /E /Y "$(ProjectDir)\Views" "$(ProjectDir)\bin\$(ConfigurationName)\Views\*"
xcopy /E /Y "$(ProjectDir)\Content" "$(ProjectDir)\bin\$(ConfigurationName)\Content\*"

当构建项目时,执行xcopy并在输出目录中复制文件,因此你的selfhost exe可以看到这些文件。