【发布时间】:2016-10-26 23:41:26
【问题描述】:
我有一个自托管的 Nancy 实例并将内容嵌入到程序集中(一些 sshtml 视图和一些 css 文件)
这是我的 DefaultNancyBootstrapper 的内容
public class CustomBootstrapper : DefaultNancyBootstrapper
{
private byte[] favicon;
protected override byte[] FavIcon
{
get { return this.favicon ?? (this.favicon = LoadFavIcon()); }
}
private byte[] LoadFavIcon()
{
using (var resourceStream = GetType().Assembly.GetManifestResourceStream("FrontEnd.Webinterface.Views.Content.Images.Icons.FavIcon.ico"))
{
var memoryStream = new MemoryStream();
resourceStream.CopyTo(memoryStream);
return memoryStream.GetBuffer();
}
}
protected override NancyInternalConfiguration InternalConfiguration
{
get
{
return NancyInternalConfiguration.WithOverrides(OnConfigurationBuilder);
}
}
void OnConfigurationBuilder(NancyInternalConfiguration x)
{
x.ViewLocationProvider = typeof(ResourceViewLocationProvider);
}
protected override void ConfigureApplicationContainer(TinyIoCContainer container)
{
Assembly assembly = Assembly.GetExecutingAssembly();
string[] assemblyNames = assembly.GetManifestResourceNames();
base.ConfigureApplicationContainer(container);
ResourceViewLocationProvider.RootNamespaces.Add(
Assembly.GetAssembly(typeof(MainModule)), "FrontEnd.Webinterface.Views");
}
protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines)
{
base.ApplicationStartup(container, pipelines);
CookieBasedSessions.Enable(pipelines);
}
protected override IEnumerable<ModuleRegistration> Modules
{
get
{
return
AppDomainAssemblyTypeScanner
.TypesOf<INancyModule>(ScanMode.All)
.NotOfType<DiagnosticModule>()
.Select(t => new ModuleRegistration(t))
.ToArray();
}
}
}
我完全不知道如何嵌入我的静态 CSS 文件 - 谁能帮帮我?
编辑:
如果这是在您的 Nancy Assembly https://github.com/NancyFx/Nancy/blob/master/src/Nancy.Embedded/Conventions/EmbeddedStaticContentConventionBuilder.cs 中,则解决方案非常简单
protected override void ConfigureConventions(NancyConventions nancyConventions)
{
Assembly Assembly = System.Reflection.Assembly.GetExecutingAssembly();
nancyConventions.StaticContentsConventions.Add(EmbeddedStaticContentConventionBuilder.AddDirectory("Static", Assembly, @"Webinterface/Static"));
nancyConventions.StaticContentsConventions.Add(StaticContentConventionBuilder.AddDirectory("Views", @"Webinterface/Views"));
}
【问题讨论】:
-
并将内容嵌入到程序集中 - 请解释一下?这些静态文件通常不会捆绑到程序集中。您能否详细说明一下您的解决方案结构。谢谢
-
我有一个解决方案,其中包含一些 Windows 表单和 Nancy Web 界面作为自托管实例。我想要一个完全开箱即用的解决方案,它在我将分发的一个 .exe 文件中包含所有 *、dll、Nancy 视图、图像、CSS。所以是的,我还嵌入了这些静态文件,如 CSS 和图像。
-
你为什么要这个?为什么所有内容都是单个 exe 很重要?
-
我只想要它 :) 我的应用程序应该是可移植的。我不喜欢我的 .exe 文件周围有很多依赖文件。我希望我的整个项目能够开箱即用地运行这个单一的可执行文件。我可以想象这不是最佳实践,但我想拥有这个“功能”。
-
好吧,这是非正统的,但我想可能,但不知道你会怎么做。我已经删除了我的答案,因为它在这种情况下没有帮助。