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

时间:2019-02-14 18:06:16

标签: c# .net razor .net-core asp.net-core-2.1

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

尽管所有这些工作都需要在各个项目之间共享我的模型时遇到问题。我将模型及其迁移提取到单独的类库中(由于迁移文件,该项目是.net核心类库)。此时一切仍然正常,但是一旦我需要从布局项目中引用实体类库,便无法执行此操作,因为.net标准项目无法引用.net核心项目(出于明显的原因)。

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

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

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

System.InvalidOperationException:'无法为程序集'MyLayoutProject'加载嵌入式文件清单'Microsoft.Extensions.FileProviders.Embedded.Manifest.xml'。

要进行此项工作是否需要进行任何修改?这有可能吗?为了使它起作用,还有什么其他想法可以提出来?

更新

下面是共享布局项目的.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>

通过此更新,原来的错误消息消失了,但是布局根本没有加载。

1 个答案:

答案 0 :(得分:0)

我能够删除所有更改并使用原始的.net标准类库项目来实现此目的。我所做的是编辑csproj,并将项目类型更改为netcoreapp2.2。似乎正在与较小的更改一起工作...

<TargetFramework>netcoreapp2.2</TargetFramework>