Тип проекта .Net Core, используемый для совместного использования макета с несколькими проектами. - PullRequest
0 голосов
/ 14 февраля 2019

В настоящее время у меня есть библиотека классов Razor, которая генерирует стандартный проект .net.В этом проекте у меня есть _Layout.cshtml и другие страницы, которые я делю с другими основными проектами .net.

Хотя все это работает, я столкнулся с проблемой, когда мне нужно было разделить мои модели между различными проектами.Я извлек модели вместе с их миграциями в отдельную библиотеку классов (этот проект является базовой библиотекой классов .net из-за файлов миграции).На данный момент все по-прежнему в порядке, но как только мне нужно было сослаться на библиотеку классов сущностей из проекта макета, я не смог этого сделать, потому что стандартный проект .net не может ссылаться на основной проект .net (по понятным причинам).

Из-за этих требований я решил, что было бы лучше сделать проект макета базовым проектом .net вместо стандартного проекта .net, чтобы у меня не возникало проблем со ссылками на проекты.Мне не нужен доступ к проекту макета из других проектов, которые не являются ядром .net, поэтому мне не нужна совместимость, обеспечиваемая стандартом .net.

В любом случае проблема, с которой я сейчас сталкиваюсь, заключается в том, что Интернетприложение не может увидеть файл _Layout.cshtml для его загрузки.Я использую тот же код, который работал с моей стандартной библиотекой.Ниже приведены строка и ошибка, которую я получаю при попытке запустить приложение:

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

System.InvalidOperationException: «Не удалось загрузить манифест встроенного файла» Microsoft.Extensions.FileProviders.Embedded.Manifest.xml 'для сборки' MyLayoutProject '.'

Есть ли какие-либо изменения, необходимые для этой работы?Это вообще возможно?Какие еще идеи могут быть мне предложены, чтобы заставить это работать?

Обновление

Ниже приведен .csproj проекта общего макета (я добавил GenerateEmbeddedFilesManifest и ItemGroups ввнизу после пакетов nuget)

<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 голосов
/ 15 февраля 2019

Я смог сделать это, удалив все свои изменения и используя оригинальный проект библиотеки стандартных классов .net.Я отредактировал csproj и изменил тип проекта на netcoreapp2.2.Кажется, что работа с этим незначительным изменением ...

<TargetFramework>netcoreapp2.2</TargetFramework>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...