微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在 .NetFramework 的类库中创建剃刀视图

如何解决无法在 .NetFramework 的类库中创建剃刀视图

我在 .Net Framework 项目中收到以下错误

The type or namespace name 'AspNetCore' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)

这是出乎意料的,因为我的解决方案中没有任何地方写有“AspNetCore”,而且我也没有尝试使用核心依赖项。

(为简单起见)我的解决方案中有两个项目;一个标准的 ASP.NET 项目和一个类库。

类库是用新的项目模板创建的:

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>net48</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
      <Content Include="Views\web.config" />
    </ItemGroup>
</Project>

类库内容如下:

- Project.csproj
+ Controller
  - ProjectController
+ viewmodels
  - Projectviewmodel.cs
+ Views
  - ProjectView.cshtml
  - web.config

我的 ProjectView.cshtml 简单如下:

@model Project.viewmodels.Projectviewmodel

<p>I'm not even using the Model</p>

我的Projectviewmodel.cs

namespace Project.viewmodels
{
  public class Projectviewmodel
  {
     public string Title {get;set;}
  }
}

我的web.config

<?xml version="1.0"?>

<configuration>
    <configSections>
        <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup,System.Web.WebPages.Razor,Version=3.0.0.0,Culture=neutral,PublicKeyToken=31BF3856AD364E35">
            <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection,PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
            <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection,PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
        </sectionGroup>
    </configSections>

    <system.web.webPages.razor>
        <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory,System.Web.Mvc,Version=5.2.7.0,PublicKeyToken=31BF3856AD364E35" />
        <pages pageBaseType="System.Web.Mvc.WebViewPage">
            <namespaces>
                <add namespace="System.Web.Mvc" />
                <add namespace="System.Web.Mvc.Ajax" />
                <add namespace="System.Web.Mvc.Html" />
                <add namespace="System.Web.Routing" />
            </namespaces>
        </pages>
    </system.web.webPages.razor>

    <appSettings>
        <add key="webpages:Enabled" value="false" />
    </appSettings>

    <system.web>
        <httpRuntime targetFramework="4.8"/>
        <compilation targetFramework="4.8">
            <assemblies>
                <add assembly="System.Web.Mvc,PublicKeyToken=31BF3856AD364E35" />
            </assemblies>
        </compilation>
    </system.web>

    <system.webServer>
        <handlers>
            <remove name="BlockViewHandler"/>
            <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
        </handlers>
    </system.webServer>
</configuration>

我有一个 Directory.Build.props 文件

<Project>
    <PropertyGroup>
        <LangVersion>8.0</LangVersion>
        <Nullable>enable</Nullable>
    </PropertyGroup>
    <ItemGroup>
        <packagereference Include="Castle.Core" Version="4.4.1" />
        <packagereference Include="Castle.Windsor" Version="4.1.1" />
        <packagereference Include="EntityFramework" Version="6.4.4" />
        <packagereference Include="EPiServer.CMS.AspNet" Version="11.20.2" />
        <packagereference Include="EPiServer.CMS" Version="11.20.2" />
        <packagereference Include="EPiServer.CMS.AspNet" Version="11.20.2" />
        <packagereference Include="EPiServer.CMS.Core" Version="11.20.2" />
        <packagereference Include="EPiServer.CMS.TinyMce" Version="2.13.0" />
        <packagereference Include="EPiServer.CMS.UI" Version="11.31.0" />
        <packagereference Include="EPiServer.CMS.UI.AspNetIdentity" Version="11.31.0" />
        <packagereference Include="EPiServer.CMS.UI.Core" Version="11.31.0" />
        <packagereference Include="EPiServer.Framework" Version="11.20.2" />
        <packagereference Include="EPiServer.Framework.AspNet" Version="11.20.2" />
        <packagereference Include="EPiServer.Logging.Log4Net" Version="2.2.2" />
        <packagereference Include="EPiServer.ServiceLocation.StructureMap" Version="2.0.3" />
        <packagereference Include="EPiServer.XForms" Version="1.0.3" />
        <packagereference Include="log4net" Version="2.0.12" />
        <packagereference Include="Microsoft.AspNet.Identity.Core" Version="2.2.3" />
        <packagereference Include="Microsoft.AspNet.Identity.EntityFramework" Version="2.2.3" />
        <packagereference Include="Microsoft.AspNet.Identity.Owin" Version="2.2.3" />
        <packagereference Include="Microsoft.AspNet.Mvc" Version="5.2.7" />
        <packagereference Include="Microsoft.AspNet.Providers.Core" Version="2.0.0" />
        <packagereference Include="Microsoft.AspNet.Razor" Version="3.2.7" />
        <packagereference Include="Microsoft.AspNet.WebApi" Version="5.2.7" />
        <packagereference Include="Microsoft.AspNet.WebApi.Client" Version="5.2.7" />
        <packagereference Include="Microsoft.AspNet.WebApi.Core" Version="5.2.7" />
        <packagereference Include="Microsoft.AspNet.WebApi.Extensions.Compression.Server" Version="2.0.6" />
        <packagereference Include="Microsoft.AspNet.WebApi.WebHost" Version="5.2.7" />
        <packagereference Include="Microsoft.AspNet.WebPages" Version="3.2.7" />
        <packagereference Include="Microsoft.Bcl" Version="1.1.10" />
        <packagereference Include="Microsoft.Bcl.Build" Version="1.0.14" />
        <packagereference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" Version="3.6.0" />
        <packagereference Include="Microsoft.IO.RecyclableMemoryStream" Version="1.3.6" />
        <packagereference Include="Microsoft.Net.Compilers.Toolset">
            <Version>3.8.0</Version>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
            <PrivateAssets>all</PrivateAssets>
        </packagereference>
        <packagereference Include="Microsoft.Net.Http" Version="2.2.29" />
        <packagereference Include="Microsoft.Owin" Version="4.1.1" />
        <packagereference Include="Microsoft.Owin.Host.SystemWeb" Version="4.1.1" />
        <packagereference Include="Microsoft.Owin.Security" Version="4.1.1" />
        <packagereference Include="Microsoft.Owin.Security.Cookies" Version="4.1.1" />
        <packagereference Include="Microsoft.Owin.Security.OAuth" Version="4.1.1" />
        <packagereference Include="Microsoft.Tpl.Dataflow" Version="4.5.24" />
        <packagereference Include="Microsoft.VisualStudio.SlowCheetah">
            <Version>3.2.26</Version>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
            <PrivateAssets>all</PrivateAssets>
        </packagereference>
        <packagereference Include="Microsoft.Web.Infrastructure" Version="1.0.0" />
        <packagereference Include="Microsoft.Web.Xdt" Version="3.1.0" />
        <packagereference Include="Newtonsoft.Json" Version="12.0.3" />
        <packagereference Include="Owin" Version="1.0.0" />
        <packagereference Include="StructureMap" Version="4.7.1" />
        <packagereference Include="structuremap-signed" Version="3.1.6.191" />
        <packagereference Include="structuremap.web" Version="4.0.0.315" />
        <packagereference Include="structuremap.web-signed" Version="3.1.6.191" />
        <packagereference Include="System.ComponentModel.Annotations" Version="4.7.0" />
        <packagereference Include="System.Data.sqlClient" Version="4.8.2" />
        <packagereference Include="System.Reflection.Emit" Version="4.7.0" />
        <packagereference Include="System.Reflection.Emit.Lightweight" Version="4.7.0" />
        <packagereference Include="System.Security.AccessControl" Version="4.7.0" />
        <packagereference Include="System.Security.Cryptography.Xml" Version="4.7.0" />
        <packagereference Include="System.Security.Permissions" Version="4.7.0" />
        <packagereference Include="System.Security.Principal.Windows" Version="4.7.0" />
        <packagereference Include="System.Threading.AccessControl" Version="4.7.0" />
        <packagereference Include="System.ValueTuple" Version="4.5.0" />
    </ItemGroup>
</Project>

我收到了 14 次错误,还有一次:

'_Views_ProjectView.ExecuteAsync()': no suitable method found to override

有人知道哪里出了问题吗?

解决方法

Directory.Build.props 中的某些内容具有核心依赖项,例如 Castle.Core。您可以加载 AspNetCore 或删除 .core 依赖项吗?

,

这确实是一个与 Visual Studio 中的 Intellisense 相关的错误。在项目构建中使用 Microsoft.Net.Sdk 时,VS 假定项目中的 Razor 视图应使用 aspnetcore 进行编译以进行智能感知。

错误是“误报”,并不会在构建时真正发生。如果您从命令行运行 msbuild 和/或使用 VS Code 作为 IDE,您将永远不会看到它们(因为它们不是真实的并且不会发生 - 这是 VS 内部做出的假设导致这些 afaik)。

要继续使用 VS,您只需将“输出”窗口中的“显示输出”更改为“仅构建”。这将消除错误。但是,它不会删除 cshtml 中的红色涂鸦下划线,但所有智能感知、代码完成等都可以正常工作。这当然不是真正的修复,afaik 需要 Visual Studio 更改智能感知处理 Razor 视图的方式。

有人告诉我,VS 团队不太可能优先解决这个问题。我会敦促您将其报告为 Visual Studio 中的错误。

如果您想将 IDE 更改为 VS Code 但依赖于一个或多个 VS Build 目标,例如 WebApplication Webpublish,您需要从 f.ex a nuget 导入这些目标,或者干脆摆脱这种构建依赖.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。