Use new file provider to serve Microsoft.Blazor.Browser and Microsoft.Blazor.Mono contents
This commit is contained in:
parent
0ed4a4eba5
commit
867cb66b97
|
|
@ -1,31 +1,15 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using Microsoft.Blazor.Internal.Common.FileProviders;
|
||||||
using Microsoft.Extensions.FileProviders;
|
using Microsoft.Extensions.FileProviders;
|
||||||
using Microsoft.Extensions.Primitives;
|
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace Microsoft.Blazor.Browser
|
namespace Microsoft.Blazor.Browser
|
||||||
{
|
{
|
||||||
public class BlazorBrowserFileProvider : IFileProvider
|
public static class BlazorBrowserFileProvider
|
||||||
{
|
{
|
||||||
private EmbeddedFileProvider _embeddedFiles = new EmbeddedFileProvider(
|
public static IFileProvider Instance = new EmbeddedResourceFileProvider(
|
||||||
typeof(BlazorBrowserFileProvider).Assembly,
|
typeof(BlazorBrowserFileProvider).Assembly,
|
||||||
"blazor");
|
"blazor.");
|
||||||
|
|
||||||
public static BlazorBrowserFileProvider Instance = new BlazorBrowserFileProvider();
|
|
||||||
|
|
||||||
private BlazorBrowserFileProvider()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public IFileInfo GetFileInfo(string subpath)
|
|
||||||
=> _embeddedFiles.GetFileInfo(subpath.Replace('/', '$'));
|
|
||||||
|
|
||||||
public IDirectoryContents GetDirectoryContents(string subpath)
|
|
||||||
=> throw new NotImplementedException(); // Don't need to support this
|
|
||||||
|
|
||||||
public IChangeToken Watch(string filter)
|
|
||||||
=> throw new NotImplementedException(); // Don't need to support this
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Microsoft.Blazor.BuildTools\Microsoft.Blazor.BuildTools.csproj" ReferenceOutputAssembly="false" />
|
<ProjectReference Include="..\Microsoft.Blazor.BuildTools\Microsoft.Blazor.BuildTools.csproj" ReferenceOutputAssembly="false" />
|
||||||
|
<ProjectReference Include="..\Microsoft.Blazor.Common\Microsoft.Blazor.Common.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="..\Microsoft.Blazor.BuildTools\local.props" />
|
<Import Project="..\Microsoft.Blazor.BuildTools\local.props" />
|
||||||
|
|
||||||
|
|
@ -30,7 +31,7 @@
|
||||||
<RemoveDir Directories="dist" />
|
<RemoveDir Directories="dist" />
|
||||||
<Exec Command="npm run build" />
|
<Exec Command="npm run build" />
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<EmbeddedResource Include="dist\blazor.js" LogicalName="blazor.$blazor.js" />
|
<EmbeddedResource Include="dist\blazor.js" LogicalName="blazor./blazor.js" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
namespace Microsoft.Blazor.Internal.Common.FileProviders
|
||||||
|
{
|
||||||
|
public class EmbeddedResourceFileProvider : InMemoryFileProvider
|
||||||
|
{
|
||||||
|
public EmbeddedResourceFileProvider(Assembly assembly, string resourceNamePrefix)
|
||||||
|
: base(ReadEmbeddedResources(assembly, resourceNamePrefix))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IEnumerable<(string, Stream)> ReadEmbeddedResources(
|
||||||
|
Assembly assembly, string resourceNamePrefix)
|
||||||
|
{
|
||||||
|
return assembly.GetManifestResourceNames()
|
||||||
|
.Where(name => name.StartsWith(resourceNamePrefix, StringComparison.Ordinal))
|
||||||
|
.Select(name => (
|
||||||
|
name.Substring(resourceNamePrefix.Length),
|
||||||
|
assembly.GetManifestResourceStream(name)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -7,14 +7,14 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="2.0.0" />
|
<ProjectReference Include="..\Microsoft.Blazor.Common\Microsoft.Blazor.Common.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<Target Name="EmbedMonoResources" BeforeTargets="PreBuildEvent" DependsOnTargets="OptimizeMono">
|
<Target Name="EmbedMonoResources" BeforeTargets="PreBuildEvent" DependsOnTargets="OptimizeMono">
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<MonoResourcesToEmbed Include="$(MonoOptimizedDir)**" />
|
<MonoResourcesToEmbed Include="$(MonoOptimizedDir)**" />
|
||||||
<EmbeddedResource Include="@(MonoResourcesToEmbed)">
|
<EmbeddedResource Include="@(MonoResourcesToEmbed)">
|
||||||
<LogicalName>mono.$([System.String]::Copy('/%(RecursiveDir)%(FileName)%(Extension)').Replace('\', '$').Replace('/', '$'))</LogicalName>
|
<LogicalName>mono.$([System.String]::Copy('/%(RecursiveDir)%(FileName)%(Extension)').Replace('\', '/'))</LogicalName>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Target>
|
</Target>
|
||||||
|
|
|
||||||
|
|
@ -1,36 +1,14 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using Microsoft.Blazor.Internal.Common.FileProviders;
|
||||||
using Microsoft.Extensions.FileProviders;
|
using Microsoft.Extensions.FileProviders;
|
||||||
using Microsoft.Extensions.Primitives;
|
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace Microsoft.Blazor.Mono
|
namespace Microsoft.Blazor.Mono
|
||||||
{
|
{
|
||||||
public class MonoStaticFileProvider : IFileProvider
|
public static class MonoStaticFileProvider
|
||||||
{
|
{
|
||||||
private EmbeddedFileProvider _embeddedFiles = new EmbeddedFileProvider(
|
public readonly static IFileProvider Instance = new EmbeddedResourceFileProvider(
|
||||||
typeof(MonoStaticFileProvider).Assembly,
|
typeof(MonoStaticFileProvider).Assembly, "mono.");
|
||||||
"mono");
|
|
||||||
|
|
||||||
public static MonoStaticFileProvider Instance = new MonoStaticFileProvider();
|
|
||||||
|
|
||||||
private MonoStaticFileProvider()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public IFileInfo GetFileInfo(string subpath)
|
|
||||||
{
|
|
||||||
// EmbeddedFileProvider can't find resources whose names include '/' (or '\'),
|
|
||||||
// so the resources in the assembly use '$' as a directory separator
|
|
||||||
var possibleResourceName = subpath.Replace('/', '$');
|
|
||||||
return _embeddedFiles.GetFileInfo(possibleResourceName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public IDirectoryContents GetDirectoryContents(string subpath)
|
|
||||||
=> _embeddedFiles.GetDirectoryContents(subpath);
|
|
||||||
|
|
||||||
public IChangeToken Watch(string filter)
|
|
||||||
=> throw new NotImplementedException(); // Don't need to support this
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue