我正在开发一个ASP.NET Core应用程序,我希望将其作为NuGet包发布,您可以将其添加到任何Core Web项目中.该应用程序实际上完全局限于项目中的一个区域(即/ Areas / MyArea),包括控制器,视图,服务类,模型,视图等,除了少数部分.真的,这些是我喜欢神奇地添加到现有网络应用程序的部分:
>该地区及其中的一切
>它的www和JS在wwwroot / lib / myapp中
> Startup类中的条目
>根中的MyApp.json
我知道NuGet会恢复软件包依赖关系,但我不确定它是如何考虑客户端软件包的.
有什么建议? NuGet是错误的工具吗?
解决方法
目前afaik无法从nuget包中将文件传送到Web应用程序.我认为有一些讨论和工作正在进行中,以便将来实现这一目标.
我在我的项目中处理它的方式是嵌入视图和所需的静态js和css资源,这在project.json中是这样完成的:
“buildOptions”:{
“embed”:[“Views /”,“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拥有它需要的一切,所以只有一些启动配置才能让事情发挥作用.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。