diff --git a/src/Squidex/Config/Identity/MicrosoftIdentityUsage.cs b/src/Squidex/Config/Identity/MicrosoftIdentityUsage.cs index 40088d10b..60690d3f7 100644 --- a/src/Squidex/Config/Identity/MicrosoftIdentityUsage.cs +++ b/src/Squidex/Config/Identity/MicrosoftIdentityUsage.cs @@ -6,6 +6,7 @@ // All rights reserved. // ========================================================================== +using Microsoft.AspNetCore.Authentication.MicrosoftAccount; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; diff --git a/src/Squidex/Config/Web/WebDependencies.cs b/src/Squidex/Config/Web/WebDependencies.cs index 019def3c5..c515a3e2b 100644 --- a/src/Squidex/Config/Web/WebDependencies.cs +++ b/src/Squidex/Config/Web/WebDependencies.cs @@ -6,8 +6,11 @@ // All rights reserved. // ========================================================================== +using System.Linq; +using Microsoft.AspNetCore.Mvc.Razor.Compilation; using Microsoft.Extensions.DependencyInjection; using Squidex.Config.Domain; +using Squidex.Pipeline; namespace Squidex.Config.Web { @@ -15,7 +18,16 @@ namespace Squidex.Config.Web { public static void AddMyMvc(this IServiceCollection services) { - services.AddMvc().AddMySerializers(); + services + .AddMvc() + .AddMySerializers() + .ConfigureApplicationPartManager(manager => + { + var oldMetadataReferenceFeatureProvider = manager.FeatureProviders.First(f => f is MetadataReferenceFeatureProvider); + + manager.FeatureProviders.Remove(oldMetadataReferenceFeatureProvider); + manager.FeatureProviders.Add(new ReferencesMetadataReferenceFeatureProvider()); + }); } } } diff --git a/src/Squidex/Pipeline/Foo.cs b/src/Squidex/Pipeline/Foo.cs new file mode 100644 index 000000000..4190260a5 --- /dev/null +++ b/src/Squidex/Pipeline/Foo.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Reflection.PortableExecutable; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc.ApplicationParts; +using Microsoft.AspNetCore.Mvc.Razor.Compilation; +using Microsoft.CodeAnalysis; +using Microsoft.Extensions.DependencyModel; + +namespace Squidex.Pipeline +{ + public class ReferencesMetadataReferenceFeatureProvider : IApplicationFeatureProvider + { + public void PopulateFeature(IEnumerable parts, MetadataReferenceFeature feature) + { + var libraryPaths = new HashSet(StringComparer.OrdinalIgnoreCase); + foreach (var providerPart in parts.OfType()) + { + try + { + var referencePaths = providerPart.GetReferencePaths(); + foreach (var path in referencePaths) + { + if (libraryPaths.Add(path)) + { + var metadataReference = CreateMetadataReference(path); + feature.MetadataReferences.Add(metadataReference); + } + } + } + catch (InvalidOperationException) + { + Debug.WriteLine("FOO"); + } + } + } + + private static MetadataReference CreateMetadataReference(string path) + { + using (var stream = File.OpenRead(path)) + { + var moduleMetadata = ModuleMetadata.CreateFromStream(stream, PEStreamOptions.PrefetchMetadata); + var assemblyMetadata = AssemblyMetadata.Create(moduleMetadata); + + return assemblyMetadata.GetReference(filePath: path); + } + } + } +} diff --git a/src/Squidex/Squidex.csproj b/src/Squidex/Squidex.csproj index 83d110efc..0b13fbdd4 100644 --- a/src/Squidex/Squidex.csproj +++ b/src/Squidex/Squidex.csproj @@ -1,10 +1,9 @@  - Squidex true + true $(NoWarn);CS1591;1591;1573;1572 - Exe Squidex true netcoreapp2.0 @@ -63,12 +62,14 @@ + + diff --git a/tests/Squidex.Infrastructure.Tests/Squidex.Infrastructure.Tests.csproj b/tests/Squidex.Infrastructure.Tests/Squidex.Infrastructure.Tests.csproj index d99b3ad5f..a41525658 100644 --- a/tests/Squidex.Infrastructure.Tests/Squidex.Infrastructure.Tests.csproj +++ b/tests/Squidex.Infrastructure.Tests/Squidex.Infrastructure.Tests.csproj @@ -13,8 +13,8 @@ - - + +