我有一个.NET Core 2.0多项目解决方案 . 我的主项目名为myproject.Web,并有一个文件夹Views(带子文件夹),其中包含所有 cshtml 文件 . 另外,myproject.Web依赖于另一个项目myproject.UI,它还有一个文件夹Views,其中包含许多项目共有的 cshtml .

当我在命令行上执行 dotnet run 时,项目myproject.Web运行正常 . 但是,当我 dotnet publish 和(在发布文件夹中)执行 dotnet myproject.Web.dll 时,项目无法按预期工作 . 登录页面在浏览器中加载,但是当我登录时收到HTTP 404错误 . 检查后,我发现Views文件夹中没有任何文件被复制 . 这似乎是问题的可能来源 .

我已经设法将UI项目中的cshtml文件放入发布文件夹中,但经过我的努力,我无法将 myproject.Web\Views 中的 cshtml 文件放入发布文件夹中 .

我在 .csproj 文件的相关部分下面发布 .

<ItemGroup>
    <Folder Include="Views\" />
  </ItemGroup>

  <ItemGroup>
    <None Include="Views\**\*">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
      <CopyToPublishDirectory>Always</CopyToPublishDirectory>
    </None>
  </ItemGroup>

  <Target Name="PostPublish" AfterTargets="AfterPublish">
    <Exec Command="xcopy /E /Y /R  &quot;$(ProjectDir)..\myproject.UI\Views\*&quot; $(PublishDir)Views\*" />
  </Target>

Update

下面Kirk的评论解释了为什么没有复制 cshtml 文件 . 但这并不能解释为什么我会收到404错误 . 简单来说:

  • 登录页面不显示404(按预期工作) .

  • 执行日志记录后出现404错误 .

  • dotnet myproject.Web.dll 输出未显示任何错误(为完整性而复制如下) .

  • 此行为仅发生在已发布的工件上,当使用 dotnet run 执行时,它可以正常工作 .

dotnet myproject.Web.dll 输出:

Hosting environment: Local
Content root path: C:\Projects\Master-Demos\Code\myproject.Web\bin\Release\netcoreapp2.0\publish
Now listening on: http://0.0.0.0:57579
Application started. Press Ctrl+C to shut down.
ContentProvider [Watch]: /Views/Home/../Shared/Widgets/_TileEnriched.cshtml
ContentProvider [GetFileInfo]: /Views/Home/../Shared/Widgets/_TileEnriched.cshtml
ContentProvider [GetFileInfo]: /Views/Home/../Shared/Widgets/_TileEnriched.cshtml
ContentProvider [Watch]: /Views/Home/../Shared/Widgets/_TileEnriched.cshtml
ContentProvider [GetFileInfo]: /Views/Home/../Shared/Widgets/_TileEnriched.cshtml
ContentProvider [GetFileInfo]: /Views/Home/../Shared/Widgets/_TileEnriched.cshtml