.net core, совместное использование представлений и контроллеров, загрузка представлений из проекта .net framework - PullRequest
0 голосов
/ 18 октября 2018

У меня есть библиотека стандарта .net 2.0 (sdk = Microsoft.NET.Sdk.Razor), которая называется SelfHost.SelfHost запускает сервер веб-хостинга kestrel с MVC.SelfHost содержит также контроллеры и представления.Сборка выдает SelfHost.Views.dll, загружаются контроллеры из SelfHost, все до этого момента работает нормально.И хитрая часть: я хочу, чтобы SlefHost также загружал контроллеры и представления из клиентского приложения (сборка, которая ссылается на эту библиотеку).SelfHost обнаруживает контроллеры из другой сборки, используя:

services.AddApplicationPart(clientAssembly)

Обнаружение представлений из другой сборки осуществляется с помощью:

services.Configure<RazorViewEngineOptions>(options => options.FileProviders.Add(new EmbeddedFileProvider(clientAssembly));

В этом подходе для действия построения представлений необходимо установить значение «Встроенный ресурс»."

Случай 1:

Запуск основного консольного приложения .net (sdk = Microsoft.NET.Sdk), использующего SelfHost, без добавления дополнительных контроллеров и представлений в консольное приложение.,Итак, у нас есть чистое консольное приложение с контроллерами и представлениями только из SelfHost.

Результат 1 : все работает нормально.У меня есть доступ к контроллерам, представления возвращаются.

Случай 2: Запуск консольного приложения ядра .net (sdk = Microsoft.NET.Sdk. Razor ), который используетSelfHost, с добавлением дополнительных контроллеров и представлений в консольное приложение.Итак, у нас есть консольное приложение с контроллерами / представлениями от selfhost и контроллерами / представлениями из консольного приложения.

Результат 2 Все работает отлично.У меня есть доступ к SelfHost и контроллерам консольных приложений.Возвращаются представления из SelfHost и консольного приложения.

Случай 3: Запуск основного консольного приложения .net (sdk = Microsoft.NET.Sdk, без Razor), использующего SelfHost, с добавление дополнительных контроллеров и представлений в консольное приложение.Итак, у нас есть консольное приложение с контроллерами / представлениями от selfhost и контроллерами / представлениями из консольного приложения.

Результат 3:

При попытке получить доступ к представлению из консольного приложения яполучение:

One or more compilation references are missing. Ensure that your project is referencing 'Microsoft.NET.Sdk.Web' and the 'PreserveCompilationContext' property is not set to false.

The type or namespace name 'Microsoft' could not be found in the global namespace (are you missing an assembly reference?)
+
[assembly: global::Microsoft.AspNetCore.Razor.Hosting.RazorCompiledItemAttribute(typeof(AspNetCore._Views_Jakis_Index), @"mvc.1.0.view", @"/Views/Jakis/Index.cshtml")]
The type or namespace name 'Microsoft' could not be found in the global namespace (are you missing an assembly reference?)
+
[assembly:global::Microsoft.AspNetCore.Mvc.Razor.Compilation.RazorViewAttribute(@"/Views/Jakis/Index.cshtml", typeof(AspNetCore._Views_Jakis_Index))]
Predefined type 'System.Type' is not defined or imported
+
[assembly: global::Microsoft.AspNetCore.Razor.Hosting.RazorCompiledItemAttribute(typeof(AspNetCore._Views_Jakis_Index), @"mvc.1.0.view", @"/Views/Jakis/Index.cshtml")]
Predefined type 'System.String' is not defined or imported
+
[assembly: global::Microsoft.AspNetCore.Razor.Hosting.RazorCompiledItemAttribute(typeof(AspNetCore._Views_Jakis_Index), @"mvc.1.0.view", @"/Views/Jakis/Index.cshtml")]
Predefined type 'System.String' is not defined or imported
+
[assembly: global::Microsoft.AspNetCore.Razor.Hosting.RazorCompiledItemAttribute(typeof(AspNetCore._Views_Jakis_Index), @"mvc.1.0.view", @"/Views/Jakis/Index.cshtml")]
Predefined type 'System.String' is not defined or imported
+
[assembly:global::Microsoft.AspNetCore.Mvc.Razor.Compilation.RazorViewAttribute(@"/Views/Jakis/Index.cshtml", typeof(AspNetCore._Views_Jakis_Index))]
Predefined type 'System.Type' is not defined or imported
+
[assembly:global::Microsoft.AspNetCore.Mvc.Razor.Compilation.RazorViewAttribute(@"/Views/Jakis/Index.cshtml", typeof(AspNetCore._Views_Jakis_Index))]
The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?)
+
    using System;
The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?)
+
    using System.Collections.Generic;
The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?)
+
    using System.Linq;
The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?)
+
    using System.Threading.Tasks;
The type or namespace name 'Microsoft' could not be found (are you missing a using directive or an assembly reference?)
+
    using Microsoft.AspNetCore.Mvc;
The type or namespace name 'Microsoft' could not be found (are you missing a using directive or an assembly reference?)
+
    using Microsoft.AspNetCore.Mvc.Rendering;
The type or namespace name 'Microsoft' could not be found (are you missing a using directive or an assembly reference?)
+
    using Microsoft.AspNetCore.Mvc.ViewFeatures;
The type or namespace name 'Microsoft' could not be found in the global namespace (are you missing an assembly reference?)
+
    [global::Microsoft.AspNetCore.Razor.Hosting.RazorSourceChecksumAttribute(@"SHA1", @"3884152d0999a8c1c979e05ec6b3e584997f3684", @"/Views/Jakis/Index.cshtml")]
Predefined type 'System.String' is not defined or imported
+
    [global::Microsoft.AspNetCore.Razor.Hosting.RazorSourceChecksumAttribute(@"SHA1", @"3884152d0999a8c1c979e05ec6b3e584997f3684", @"/Views/Jakis/Index.cshtml")]
Predefined type 'System.String' is not defined or imported
+
    [global::Microsoft.AspNetCore.Razor.Hosting.RazorSourceChecksumAttribute(@"SHA1", @"3884152d0999a8c1c979e05ec6b3e584997f3684", @"/Views/Jakis/Index.cshtml")]
Predefined type 'System.String' is not defined or imported
+
    [global::Microsoft.AspNetCore.Razor.Hosting.RazorSourceChecksumAttribute(@"SHA1", @"3884152d0999a8c1c979e05ec6b3e584997f3684", @"/Views/Jakis/Index.cshtml")]
The type or namespace name 'Microsoft' could not be found in the global namespace (are you missing an assembly reference?)
+
    public class _Views_Jakis_Index : global::Microsoft.AspNetCore.Mvc.Razor.RazorPage<dynamic>
Cannot define a class or member that utilizes 'dynamic' because the compiler required type 'System.Runtime.CompilerServices.DynamicAttribute' cannot be found. Are you missing a reference?
+
    public class _Views_Jakis_Index : global::Microsoft.AspNetCore.Mvc.Razor.RazorPage<dynamic>
Predefined type 'System.Boolean' is not defined or imported
+
    public class _Views_Jakis_Index : global::Microsoft.AspNetCore.Mvc.Razor.RazorPage<dynamic>
The return type of an async method must be void, Task or Task<T>
+
        public async override global::System.Threading.Tasks.Task ExecuteAsync()
The type or namespace name 'System' could not be found in the global namespace (are you missing an assembly reference?)
+
        public async override global::System.Threading.Tasks.Task ExecuteAsync()
The type or namespace name 'Microsoft' could not be found in the global namespace (are you missing an assembly reference?)
+
        public global::Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider ModelExpressionProvider { get; private set; }
Predefined type 'System.Void' is not defined or imported
+
        public global::Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider ModelExpressionProvider { get; private set; }
The type or namespace name 'Microsoft' could not be found in the global namespace (are you missing an assembly reference?)
+
        public global::Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
Predefined type 'System.Void' is not defined or imported
+
        public global::Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
The type or namespace name 'Microsoft' could not be found in the global namespace (are you missing an assembly reference?)
+
        public global::Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
Predefined type 'System.Void' is not defined or imported
+
        public global::Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
The type or namespace name 'Microsoft' could not be found in the global namespace (are you missing an assembly reference?)
+
        public global::Microsoft.AspNetCore.Mvc.Rendering.IJsonHelper Json { get; private set; }
Predefined type 'System.Void' is not defined or imported
+
        public global::Microsoft.AspNetCore.Mvc.Rendering.IJsonHelper Json { get; private set; }
The type or namespace name 'Microsoft' could not be found in the global namespace (are you missing an assembly reference?)
+
        public global::Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper<dynamic> Html { get; private set; }
Predefined type 'System.Object' is not defined or imported
+
        public global::Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper<dynamic> Html { get; private set; }
Cannot define a class or member that utilizes 'dynamic' because the compiler required type 'System.Runtime.CompilerServices.DynamicAttribute' cannot be found. Are you missing a reference?
+
        public global::Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper<dynamic> Html { get; private set; }
Predefined type 'System.Boolean' is not defined or imported
+
        public global::Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper<dynamic> Html { get; private set; }
Predefined type 'System.Void' is not defined or imported
+
        public global::Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper<dynamic> Html { get; private set; }
'_Views_Jakis_Index.ExecuteAsync()': no suitable method found to override
+
        public async override global::System.Threading.Tasks.Task ExecuteAsync()
The type or namespace name 'Microsoft' could not be found in the global namespace (are you missing an assembly reference?)
+
        [global::Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
The type or namespace name 'Microsoft' could not be found in the global namespace (are you missing an assembly reference?)
+
        [global::Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
The type or namespace name 'Microsoft' could not be found in the global namespace (are you missing an assembly reference?)
+
        [global::Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]

Эта ошибка также возникает, когда консольное приложение находится в стеке .net Framework.Я полагаю, это потому, что нет доступных бритв SDK для компиляции этих представлений.Есть ли решение этой проблемы?Я хотел бы использовать эту библиотеку SelfHost также в компонентах .net Framework, где я не могу установить sdk в Microsoft.NET.Sdk.Razor.

...