3 回答
TA贡献1772条经验 获得超6个赞
TA贡献1805条经验 获得超9个赞
您需要将静态资产嵌入到 Razor 类库程序集中。我认为最好的方法是查看ASP.NET Identity UI 源代码。
您应该采取以下 4 个步骤来嵌入您的资产并为其提供服务。
编辑 Razor 类库的 csproj 文件并添加以下行。
<PropertyGroup>
....
<GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
....
</PropertyGroup>
<ItemGroup>
....
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.1.2" />
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.1.1" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="2.1.1" />
<PackageReference Include="Microsoft.NET.Sdk.Razor" Version="$(MicrosoftNETSdkRazorPackageVersion)" PrivateAssets="All" />
.....
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="wwwroot\**\*" />
<Content Update="**\*.cshtml" Pack="false" />
</ItemGroup>
在您的 Razor 类库中,创建以下类来提供和路由资产。(假设您的资产位于 wwwroot 文件夹中)
public class UIConfigureOptions : IPostConfigureOptions<StaticFileOptions>
{
public UIConfigureOptions(IHostingEnvironment environment)
{
Environment = environment;
}
public IHostingEnvironment Environment { get; }
public void PostConfigure(string name, StaticFileOptions options)
{
name = name ?? throw new ArgumentNullException(nameof(name));
options = options ?? throw new ArgumentNullException(nameof(options));
// Basic initialization in case the options weren't initialized by any other component
options.ContentTypeProvider = options.ContentTypeProvider ?? new FileExtensionContentTypeProvider();
if (options.FileProvider == null && Environment.WebRootFileProvider == null)
{
throw new InvalidOperationException("Missing FileProvider.");
}
options.FileProvider = options.FileProvider ?? Environment.WebRootFileProvider;
var basePath = "wwwroot";
var filesProvider = new ManifestEmbeddedFileProvider(GetType().Assembly, basePath);
options.FileProvider = new CompositeFileProvider(options.FileProvider, filesProvider);
}
}
使依赖 Web 应用程序使用您的 Razor 类库路由器。在Startup Class的ConfigureServices方法中,添加以下行。
services.ConfigureOptions(typeof(UIConfigureOptions));
因此,现在您可以添加对文件的引用。(假设它位于 wwwroot/js/app.bundle.js)。
<script src="~/js/app.bundle.js" asp-append-version="true"></script>
TA贡献1848条经验 获得超6个赞
在 .NET Core 3.1 中,RCL 将 wwwroot 文件夹中的资产包含在 _content/{LIBRARY NAME} 下的消费应用程序中。
我们可以通过编辑 RCL 项目属性并放置StaticWebAssetBasePath将 _content/{LIBRARY NAME} 路径更改为不同的路径名。
PropertyGroup>
<StaticWebAssetBasePath Condition="$(StaticWebAssetBasePath) == ''">/path</StaticWebAssetBasePath>
</PropertyGroup>
现在您可以使用 /path/test.js 访问文件。
- 3 回答
- 0 关注
- 307 浏览
添加回答
举报