Найдите Razor Pages в другой сборке

Я хочу разместить My Project Razor Pages в другой сборке. для этого я пишу следующий код:

public void ConfigureServices(IServiceCollection services)
{
    var adminAssembly = Assembly.Load(new AssemblyName("App"));
    services.AddMvc().AddApplicationPart(adminAssembly).AddRazorOptions(options =>
    {
        var previous = options.CompilationCallback;
        options.CompilationCallback = context =>
        {
            previous?.Invoke(context);

            context.Compilation = context.Compilation.AddReferences(
                MetadataReference.CreateFromFile(typeof(dodo).Assembly.Location));
        };
    });

    services.Configure<RazorViewEngineOptions>(options =>
    {
        options.FileProviders.Add(new EmbeddedFileProvider(Assembly.Load("App")));
        options.FileProviders.Add(new PhysicalFileProvider(@"C:\Users\soheil\Documents\Visual Studio 2017\Projects\WebApplication5\App"));
    });
}

мое решение:

devenv_2017-10-10_18-44-26

при запуске localhost:5000/SameTodo Получить следующую ошибку:

Одна или несколько ссылок на компиляцию отсутствуют. Убедитесь, что ваш проект ссылается на Microsoft.NET.Sdk.Web и для свойства PreserveCompilationContext не установлено значение false.

куча:

Не удалось найти тип или имя пространства имен SameTodoModel (вам не хватает директивы using или ссылки на сборку?) + Public global :: Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper Html {get; частный набор; } Не удалось найти тип или имя пространства имен SameTodoModel (вам не хватает директивы using или ссылки на сборку?) + Public global :: Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary ViewData => (global :: Microsoft.AspNetCore .Mvc.ViewFeatures.ViewDataDictionary) PageContext? .ViewData; Не удалось найти тип или имя пространства имен SameTodoModel (вам не хватает директивы using или ссылки на сборку?) + Public SameTodoModel Model => ViewData.Model; Не удалось найти тип или имя пространства имен SameTodoModel (вам не хватает директивы using или ссылки на сборку?) + Public global :: Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary ViewData => (global :: Microsoft.AspNetCore. Mvc.ViewFeatures.ViewDataDictionary) PageContext? .ViewData;

и установите для PreserveCompilationContext значение false, но теперь работает, как я могу решить эту проблему?


person Soheil Alizadeh    schedule 10.10.2017    source источник


Ответы (2)


Вместо создания AssemblyName используйте ссылку на тип из этой сборки:

var adminAssembly = typeof(SameTodoModel).Assembly;

Кроме того, в сообщении об ошибке говорится: для свойства PreserveCompilationContext не задано значение false.

Это означает, что он должен быть установлен в значение true.

person Bruno Garcia    schedule 10.10.2017
comment
Не могли бы вы как-нибудь поделиться своим решением? Нравится опубликовать его на Github? Возможно, вам не хватает директивы using с пространством имен класса, который вы используете в этом представлении бритвы? - person Bruno Garcia; 14.10.2017

Вам нужен оператор @using в вашем _ViewImports.cshtml WebApplication5? Нравится @ using App.SameTodoModel

person Rounder    schedule 10.10.2017