嗯,到目前为止,对我来说,这个 .NET Core 的东西让我的生活变得复杂而不是让它变得更容易。无论如何,我设法让 CSS 文件驻留在同一个外部程序集中,其中(外部)视图组件嵌入在我的 _Layout 中。
一方面,我在主 Web 应用程序的 SampleAPI API 控制器 中添加了一个新的 API 方法。此 API 方法检索外部程序集中的嵌入资源并获取其流。
让我们假设嵌入需要自定义 CSS 的视图组件的外部程序集的完整命名空间有一个 命名空间 ExternalAssembly,我在那里定义了我的组件及其 CSS文件。为了清楚起见,我省略了完整视图组件。
ExternalAssembly.proj
css\
my-view-component.css
ViewComponents\
MyViewComponent.cs
Views\
Shared\
Components\
MyViewComponent\
Default.cshtml
Default.cshtml 文件和 CSS 文件在项目中被标记为嵌入式资源。
API 控制器上的 API 方法如下所示,我的应用程序是一个 ASP.NET Core 1.1 MVC,但也有一个 API。 API 方法负责将 CSS 文件作为流返回以在您的布局页面中使用:
[HttpGet("cssMyViewComponent")]
public IActionResult GetCss(string id) {
var stream = typeof(ExternalAssembly.ViewComponents.MyViewComponent)
.GetTypeInfo().Assembly
.GetManifestResourceStream("ExternalAssembly.css.my-view-component.css");
}
确保获取嵌入资源的实际名称,注意 css 文件夹名称是该资源完整命名空间的一部分。如果不确定,您可以使用 ILDASM 打开外部程序集并查找资源名称。
最后,我在 _Layout.cshtml 中引用 CSS,使用 API 方法的名称和为其定义的路由:
<link rel="stylesheet" href="~/api/SampleAPI/cssMyViewComponent" />