在可重复使用的 Razor Class 库中包含静态文件
Include static files in a reusable Razor Class Library
我正在尝试制作一个可重用的 class 库 (RCL),我可以在几个 ASP.NET 核心 MVC 项目中使用它。到目前为止一切顺利……直到我尝试在 RCL 中包含所需的 JavaScript。几乎没有关于此主题的文档。我最好的成绩是 try this example.
但是当我这样做时,在构建库时出现以下错误:
这是项目文件和库的结构:
感谢任何帮助。
现在我有一些空闲时间,我将回答我自己的问题。也许对某人有用。
最后我使用 EmmbededResources
解决了这个问题,没有 EmbeddedFilesManifest
作为 ianbusko pointed out in Github。
首先,我为 IApplicationBuilder
class 创建了一个扩展:
namespace Dashboard.Lib.Extensions
{
public static class IApplicationBuilderExtension
{
public static void UseDashboardScripts(this IApplicationBuilder builder)
{
var embeddedProvider = new EmbeddedFileProvider(typeof(Areas.Dashboard.ViewComponents.DashboardViewComponent)
.GetTypeInfo().Assembly, "Dashboard.Lib.Scripts");
builder.UseStaticFiles(new StaticFileOptions()
{
FileProvider = embeddedProvider,
RequestPath = new PathString("/Scripts")
});
}
}
}
然后我将 javascript 个文件添加到项目文件中:
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<GenerateEmbeddedFilesManifest>false</GenerateEmbeddedFilesManifest>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.1.3" />
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.1.1" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="2.1.1" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Scripts/**/**/**/*" Pack="true" />
</ItemGroup>
在 RCL 视图中,javascript 包含如下:
@section Scripts{
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
<script type="text/javascript" src="~/Scripts/pagination.js"></script>
<script type="text/javascript" src="~/Scripts/checkdigit-validator.js"></script>
<script type="text/javascript" src="~/Scripts/rut-validation.js"></script>
}
最后,在主 MVC 项目的 Statup.cs 中,您只需包含以下内容:
app.UseStaticFiles();
app.UseDashboardScripts();
我正在尝试制作一个可重用的 class 库 (RCL),我可以在几个 ASP.NET 核心 MVC 项目中使用它。到目前为止一切顺利……直到我尝试在 RCL 中包含所需的 JavaScript。几乎没有关于此主题的文档。我最好的成绩是 try this example.
但是当我这样做时,在构建库时出现以下错误:
这是项目文件和库的结构:
感谢任何帮助。
现在我有一些空闲时间,我将回答我自己的问题。也许对某人有用。
最后我使用 EmmbededResources
解决了这个问题,没有 EmbeddedFilesManifest
作为 ianbusko pointed out in Github。
首先,我为 IApplicationBuilder
class 创建了一个扩展:
namespace Dashboard.Lib.Extensions
{
public static class IApplicationBuilderExtension
{
public static void UseDashboardScripts(this IApplicationBuilder builder)
{
var embeddedProvider = new EmbeddedFileProvider(typeof(Areas.Dashboard.ViewComponents.DashboardViewComponent)
.GetTypeInfo().Assembly, "Dashboard.Lib.Scripts");
builder.UseStaticFiles(new StaticFileOptions()
{
FileProvider = embeddedProvider,
RequestPath = new PathString("/Scripts")
});
}
}
}
然后我将 javascript 个文件添加到项目文件中:
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<GenerateEmbeddedFilesManifest>false</GenerateEmbeddedFilesManifest>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.1.3" />
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.1.1" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="2.1.1" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Scripts/**/**/**/*" Pack="true" />
</ItemGroup>
在 RCL 视图中,javascript 包含如下:
@section Scripts{
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
<script type="text/javascript" src="~/Scripts/pagination.js"></script>
<script type="text/javascript" src="~/Scripts/checkdigit-validator.js"></script>
<script type="text/javascript" src="~/Scripts/rut-validation.js"></script>
}
最后,在主 MVC 项目的 Statup.cs 中,您只需包含以下内容:
app.UseStaticFiles();
app.UseDashboardScripts();