2

我想在另一个程序集中找到 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”

并设置PreserveCompilationContext为false,但现在工作了我该如何解决这个问题?

4

3 回答 3

4
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);

            var referenceAssemblies = AppDomain.CurrentDomain.GetAssemblies()
                .Where(x => !x.IsDynamic&& !string.IsNullOrEmpty(x.Location))
                .Select(x => MetadataReference.CreateFromFile(x.Location))
                .ToList();

            //add dynamic
            var dynamicAssembly = typeof(DynamicAttribute).Assembly;
                 referenceAssemblies.Add(MetadataReference.CreateFromFile(dynamicAssembly.Location));

            context.Compilation = context.Compilation.AddReferences(referenceAssemblies);
        };
    });

    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"));
    });
}
于 2018-01-11T05:39:29.510 回答
0

使用来自该程序集的类型的引用,而不是新的 AssemblyName:

var adminAssembly = typeof(SameTodoModel).Assembly;

此外,错误消息显示:“PreserveCompilationContext”属性未设置为 false。

意味着它应该设置为true。

于 2017-10-10T18:58:51.860 回答
-1

您是否需要在 WebApplication5 的 _ViewImports.cshtml 中使用 @using 语句?喜欢@using App.SameTodoModel

于 2017-10-10T17:21:40.813 回答