目前 afaik 无法将文件从 nuget 包传递到 Web 应用程序。我认为关于在未来实现这一点的一些讨论和工作正在进行中。
我在项目中处理该问题的方式是在 project.json 中嵌入视图和所需的静态 js 和 css 资源:
“构建选项”:{
“嵌入”:[“视图/”、“js/”、“css/**”]
},
我创建了一个controller to serve my static resources:
public class cscsrController : Controller
{
private ContentResult GetContentResult(string resourceName, string contentType)
{
var assembly = typeof(cscsrController).GetTypeInfo().Assembly;
var resourceStream = assembly.GetManifestResourceStream(resourceName);
string payload;
using (var reader = new StreamReader(resourceStream, Encoding.UTF8))
{
payload = reader.ReadToEnd();
}
return new ContentResult
{
ContentType = contentType,
Content = payload,
StatusCode = 200
};
}
[HttpGet]
[AllowAnonymous]
public ContentResult bootstrapdatetimepickercss()
{
return GetContentResult(
"cloudscribe.Core.Web.css.bootstrap-datetimepicker.min.css",
"text/css");
}
[HttpGet]
[AllowAnonymous]
public ContentResult momentwithlocalesjs()
{
return GetContentResult(
"cloudscribe.Core.Web.js.moment-with-locales.min.js",
"text/javascript");
}
}
然后我在需要加载 js 和/或 css 的视图中链接到控制器操作。
为了让嵌入式视图正常工作,我创建了 RazorViewEngineOptions 的扩展方法:
public static RazorViewEngineOptions AddEmbeddedViewsForCloudscribeCore(this RazorViewEngineOptions options)
{
options.FileProviders.Add(new EmbeddedFileProvider(
typeof(SiteManager).GetTypeInfo().Assembly,
"cloudscribe.Core.Web"
));
return options;
}
这必须从 Web 应用 Startup 中的 ConfigureServices 调用,如下所示:
services.AddMvc()
.AddRazorOptions(options =>
{
options.AddEmbeddedViewsForCloudscribeCore();
})
;
这种技术应该适用于区域。请注意,一件很酷的事情是用户可以下载视图并在本地安装它们,这将覆盖嵌入式视图的使用,从而可以轻松自定义部分或全部视图。通过覆盖视图,如果需要,还可以在本地手动安装 js 和 css,并在需要自定义时更改视图以链接到这些本地文件。最终结果是我的 nuget 拥有所需的一切,因此只需进行一些启动配置即可让一切正常运行。