.Net Core 项目类型用于与多个项目共享布局

.Net Core project type used to share layout with multiple projects

目前我有一个生成 .net 标准项目的 Razor Class 库。在这个项目中,我有我的 _Layout.cshtml 和我与其他 .net 核心项目共享的其他页面。

虽然所有这些都有效,但我 运行 遇到了一个问题,因为我还需要在多个项目之间共享我的模型。我将模型连同它们的迁移一起提取到一个单独的 class 库中(由于迁移文件,该项目是一个 .net 核心 class 库)。此时一切都还好,但是当我需要从布局项目中引用实体 class 库时,我无法这样做,因为 .net 标准项目无法引用 .net 核心项目(原因很明显).

由于这些要求,我认为最好将布局项目设为 .net 核心项目而不是 .net 标准项目,这样我在引用项目时就不会有任何问题。我不需要从任何其他非 .net 核心项目访问布局项目,因此我不需要 .net 标准提供的兼容性。

无论如何,我目前面临的问题是 Web 应用程序无法看到 _Layout.cshtml 文件来加载它。我使用的代码与我的标准库完全相同。下面是我在尝试 运行 应用程序时遇到的行和错误:

var filesProvider = new ManifestEmbeddedFileProvider(GetType().Assembly, "resources");

System.InvalidOperationException: 'Could not load the embedded file manifest 'Microsoft.Extensions.FileProviders.Embedded.Manifest.xml' for assembly 'MyLayoutProject'.'

是否需要进行任何修改才能使这项工作正常进行?这可能吗?还有什么其他想法可以让我实现这一目标?

更新

下面是共享布局项目的.csproj(我在nuget包之后在底部添加了GenerateEmbeddedFilesManifest和ItemGroups)

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="bootstrap" Version="4.3.1" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.2.0" />
    <PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="2.2.0" />
    <PackageReference Include="Microsoft.NET.Sdk.Razor" Version="2.2.0" />
    <PackageReference Include="Microsoft.Windows.Compatibility" Version="2.0.1" />
    <PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
  </ItemGroup>

  <ItemGroup>
    <Content Update="Areas\Features\Pages\Shared\_Layout.cshtml">
      <Pack>$(IncludeRazorContentInPack)</Pack>
    </Content>
    <Content Update="Areas\Features\Pages\_ViewStart.cshtml">
      <Pack>$(IncludeRazorContentInPack)</Pack>
    </Content>
  </ItemGroup>

  <ItemGroup>
    <EmbeddedResource Include="Resources\**\*" />
  </ItemGroup>

  <ItemGroup>
    <EmbeddedResource Remove="Resources\js\jquery-3.3.1.min.js" />
  </ItemGroup>
</Project>

通过这次更新,原来的错误消息消失了,但是布局根本不会加载。

我能够通过删除所有更改并使用原始 .net 标准 class 库项目来完成此操作。我所做的是编辑 csproj 并将项目类型更改为 netcoreapp2.2。它似乎正在处理那个小改动...

<TargetFramework>netcoreapp2.2</TargetFramework>