【问题标题】:MVC Core build refrencesMVC Core 构建参考
【发布时间】:2018-10-02 11:59:57
【问题描述】:

所以我正在尝试在基于 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 文件夹吗?

【问题讨论】:

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


    【解决方案1】:

    PreserveCompilationContext 设置为 false

    在项目文件中似乎可以修复它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-13
      • 2017-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      相关资源
      最近更新 更多