2014-07-07 41 views
2

我的想法是,如果你创建自己的主机南希控制台应用程序,并想提供HTML,JavaScript和CSS文件,你必须通过所有这些文件(可能是一个相当很少),并将它们全部标记为输出目录。南希自我主机和静态内容文件

public class HomeModule : NancyModule 
{ 
    public HomeModule() 
    { 

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

如果index.html文件位于项目文件夹中,并且未标记为复制以输出其属性,则不会找到此项。

+0

是的。你是对的。 – spender

+0

为什么倒票? – Paul

+0

不错,你错了。 – Phill

回答

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(); 
    } 
} 
+0

我相信你误解了OP的要求。他们已经创建了一个(非web)项目,其中可执行文件由VS在'/ bin'文件夹中创建并运行。这意味着(不像在web项目中),任何内容文件也必须通过将这些文件中的每一个的属性明确地改变为“复制到输出目录”而被复制到'/ bin'文件夹中。 OP在询问这种财产变化是否可以以某种方式自动化。 – spender

+0

哦,我站好了。在这种情况下,我只是复制为项目文件中的构建事件的一部分或CI上的构建任务。 – Phill

+0

感谢您的信息 - 所以如果我想使用后构建事件什么是保存文件结构的开关/ t保留文件结构但不复制文件我想保留目录结构和复制文件? – Paul

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可以看到这些文件。

1

我有同样的问题,我找到了一个解决办法,其他人可能会发现有用:

,而不要照搬每个构建文件的输出目录,我在它创建了一个directory junction,针对原有的静态文件目录。

这使得视觉工作室静态内容的实时编辑(无需以编辑的文件复制到输出目录重建)

例如(构建后命令行):

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"