目前我有一个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>
通过此更新,原始错误消息消失了,但布局根本不加载。
我能够通过删除所有更改并使用原始.net标准类库项目来实现此目的。我所做的是编辑csproj并将项目类型更改为netcoreapp2.2。它似乎与那个微小的变化有关......
<TargetFramework>netcoreapp2.2</TargetFramework>