MVC Core构建参考

时间:2018-10-02 11:59:57

标签: c# .net-core asp.net-core-mvc

因此,我试图基于Razor库在我的应用程序中创建模块化。

任何开发模块的方法是使用Visual Studio,将调试构建输出设置到我的应用程序模块目录。 然后,应用程序选择模块dll并将其添加为一部分。 该方法有效,但问题是在构建项目时,在模块输出文件夹中生成了refs文件夹。 这导致应用程序抛出

  

InvalidOperationException:找不到编译库位置   用于包装

删除文件夹可使所有功能正常运行。

这是我的应用程序加载模块库的方式

  Assembly PLUGIN_ASSEMBLY = null;
                        try
                        {
                            PLUGIN_ASSEMBLY = Assembly.LoadFile(PLUGIN.PluginFileName);
                        }
                        catch (FileLoadException)
                        {
                            throw;
                        }

                        var PART_FACTORY = ApplicationPartFactory.GetApplicationPartFactory(PLUGIN_ASSEMBLY);

                        var PLUGIN_PART = PART_FACTORY.GetApplicationParts(PLUGIN_ASSEMBLY);
                        foreach (var PART in PLUGIN_PART)
                        {
                            PART_MANAGER.ApplicationParts.Add(PART);
                        }

                        var RELATED_ASSEMBLIES = RelatedAssemblyAttribute.GetRelatedAssemblies(PLUGIN_ASSEMBLY, throwOnError: true);
                        foreach (var RELATED_ASSEMBLY in RELATED_ASSEMBLIES)
                        {
                            PART_FACTORY = ApplicationPartFactory.GetApplicationPartFactory(RELATED_ASSEMBLY);
                            foreach (var part in PART_FACTORY.GetApplicationParts(RELATED_ASSEMBLY))
                            {
                                PART_MANAGER.ApplicationParts.Add(part);
                            }
                        }

                        MVC_BUILDER.AddRazorOptions(o =>
                        {
                            o.FileProviders.Add(new PhysicalFileProvider(PLUGIN.BasePath));
                        });

还有堆栈跟踪

Microsoft.Extensions.DependencyModel.CompilationLibrary.ResolveReferencePaths(ICompilationAssemblyResolver resolver, List<string> assemblies)
System.Linq.Enumerable.SelectManyIterator<TSource, TResult>(IEnumerable<TSource> source, Func<TSource, IEnumerable<TResult>> selector)+MoveNext()
Microsoft.AspNetCore.Mvc.Razor.Compilation.MetadataReferenceFeatureProvider.PopulateFeature(IEnumerable<ApplicationPart> parts, MetadataReferenceFeature feature)
Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager.PopulateFeature<TFeature>(TFeature feature)
Microsoft.AspNetCore.Mvc.Razor.Internal.DefaultRazorReferenceManager.GetCompilationReferences()
System.Threading.LazyInitializer.EnsureInitializedCore<T>(ref T target, ref bool initialized, ref object syncLock, Func<T> valueFactory)
Microsoft.AspNetCore.Mvc.Razor.Internal.DefaultRazorReferenceManager.get_CompilationReferences()
Microsoft.CodeAnalysis.Razor.CompilationTagHelperFeature.GetDescriptors()
Microsoft.AspNetCore.Razor.Language.DefaultRazorTagHelperBinderPhase.ExecuteCore(RazorCodeDocument codeDocument)
Microsoft.AspNetCore.Razor.Language.DefaultRazorEngine.Process(RazorCodeDocument document)
Microsoft.AspNetCore.Razor.Language.RazorProjectEngine.Process(RazorProjectItem projectItem)
Microsoft.AspNetCore.Mvc.Razor.Internal.RazorViewCompiler.CompileAndEmit(string relativePath)
Microsoft.AspNetCore.Mvc.Razor.Internal.RazorViewCompiler.OnCacheMiss(string normalizedPath)
Microsoft.AspNetCore.Mvc.Razor.Internal.DefaultRazorPageFactoryProvider.CreateFactory(string relativePath)
Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.CreateCacheResult(HashSet<IChangeToken> expirationTokens, string relativePath, bool isMainPage)
Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.OnCacheMiss(ViewLocationExpanderContext expanderContext, ViewLocationCacheKey cacheKey)
Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.LocatePageFromViewLocations(ActionContext actionContext, string pageName, bool isMainPage)
Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.FindView(ActionContext context, string viewName, bool isMainPage)
Microsoft.AspNetCore.Mvc.ViewEngines.CompositeViewEngine.FindView(ActionContext context, string viewName, bool isMainPage)
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.FindView(ActionContext actionContext, ViewResult viewResult)
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.ExecuteAsync(ActionContext context, ViewResult result)
Microsoft.AspNetCore.Mvc.ViewResult.ExecuteResultAsync(ActionContext context)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultAsync(IActionResult result)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResultFilterAsync<TFilter, TFilterAsync>()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResultExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.ResultNext<TFilter, TFilterAsync>(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultFilters()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)
Microsoft.AspNetCore.Diagnostics.StatusCodePagesMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

我在这里想念什么吗? 我应该采用不同的方法来加载库吗? 我可以阻止生成refs文件夹吗?

1 个答案:

答案 0 :(得分:0)

  

PreserveCompilationContext设置为false

项目文件中的

似乎可以解决该问题。