【问题标题】:Views not being copied when publish the project in netcore 2.0 visual studio 2017在 net core 2.0 Visual Studio 2017 中发布项目时未复制视图
【发布时间】:2017-10-11 09:54:23
【问题描述】:

我在 VS 2017 中创建了一个 ASP.NET Core 2.0 项目。当我发布我的项目时,Views 文件夹不存在,但 wwwroot 文件夹存在。

我可以在我的 .csproj 文件中设置以下内容:

<ItemGroup>                                                                            
   <Content Update="appsettings.json;web.config" CopyToOutputDirectory="PreserveNewest"/>
   <Content Update="Views\**\*" CopyToOutputDirectory="PreserveNewest" />
   <Content Update="wwwroot\**\*" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>

但没用。

【问题讨论】:

    标签: asp.net-core asp.net-core-mvc visual-studio-2017 asp.net-core-2.0


    【解决方案1】:

    ASP.NET Core MVC 有一个precompilation 功能,可以通过引用Microsoft.AspNetCore.Mvc.Razor.ViewCompilation 包来添加。 MvcRazorCompileOnPublish 属性配置的功能启用/禁用是 .csproj。

    并且默认情况下,该包被添加到 ASP.NET Core 2.0 MVC 应用程序中:

    如果您的目标是 netcoreapp2.0 上的 ASP.NET Core 2.0 或更高版本,则 Microsoft.AspNetCore.All 会添加对 Microsoft.AspNetCore.Mvc.Razor.ViewCompilation 包的引用,您无需显式引用它。

    precompilation is enabled:

    ASP.NET Core 2.x 项目模板默认将 MvcRazorCompileOnPublish 隐式设置为 true,这意味着可以从 .csproj 文件中安全地删除此节点:

    <PropertyGroup>
        <TargetFramework>netcoreapp2.0</TargetFramework>
        <MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish>
      </PropertyGroup>
    

    如果你去发布输出文件夹,你会看到像&lt;project_name&gt;.PrecompiledViews.dll这样的dll,其中包含你的视图。

    【讨论】:

    • 我在一个 ASP.NET 项目中使用了这个解决方案,它对我有用。我可以在构建输出中看到 .cshtml 文件。谢谢!
    【解决方案2】:

    在.NET Core 3.1或更高版本中,我们需要在.csproj中添加如下代码:

    <PropertyGroup>
      <TargetFramework>netcoreapp3.1</TargetFramework>
      <CopyRazorGenerateFilesToPublishDirectory>true</CopyRazorGenerateFilesToPublishDirectory>
    </PropertyGroup>
    

    根据docs

    true 时,将 RazorGenerate 项目 (.cshtml) 文件复制到发布目录。通常,如果 Razor 文件在构建时或发布时参与编译,则已发布的应用程序不需要这些文件。默认为false

    【讨论】:

      【解决方案3】:

      它可能默认生成&lt;project_name&gt;.Views.dll。您需要在您的项目.csproj 文件中设置MvcRazorCompileOnPublishproperty false。默认为true

      <PropertyGroup>
          <TargetFramework>netcoreapp2.1</TargetFramework>
          <MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>    
      </PropertyGroup>
      

      【讨论】:

        【解决方案4】:

        在 3.1 上,我已经尝试了以上所有方法,但没有出现 .cshtml 文件。有趣的是,我确实将 .cs 文件复制到发布文件夹中。即在我的 csproj 中,前两个工作 - 另一个没有

           <ItemGroup>
            <Compile Update="Pages\AisLayout.cs">
              <CopyToOutputDirectory>Always</CopyToOutputDirectory>
            </Compile>
            <Compile Update="Pages\Application.cs">
              <CopyToOutputDirectory>Always</CopyToOutputDirectory>
            </Compile>
          </ItemGroup>
        
          <ItemGroup>
            <Content Update="Pages\ApplicationState.cshtml">
              <CopyToOutputDirectory>Always</CopyToOutputDirectory>
            </Content>
            <Content Update="Pages\Cookies.cshtml">
              <CopyToOutputDirectory>Always</CopyToOutputDirectory>
            </Content>
        

        如果我手动复制文件,我可以通过动态重新编译来修改它们(如预期的那样)。注意:.cshtml 文件中没有代码(长篇大论)。

        更多建议?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-09-13
          • 2017-08-12
          • 2018-06-21
          • 2018-05-19
          • 2018-02-13
          • 2019-02-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多