gpt4 book ai didi

asp.net-mvc - .NET 4.7.1 中的 ASP.NET MVC 5 razor View 中引用 netstandard 2.0 类型

转载 作者:行者123 更新时间:2023-12-02 03:16:06 26 4
gpt4 key购买 nike

.NET 4.7.1 应该解决我们在从完整框架引用 netstandard 2.0 库时遇到的问题。尽管存在一些持续且令人痛苦的 dll 冲突警告和相关问题,并且需要手动更新到 PackageReferences ( see this wondeful extension ),但它确实做到了。尽管如此,人们还是可以让它工作,尽管请参阅下面的注释 1,如果我可以说:不幸的是,至少可以说,在这个问题和相关问题上还没有 VStudio 帮助或太多指导,到目前为止,人们必须找到这样的github 上的反向 channel 帮助。理想情况下,这个问题本身应该被告知:ASP.NET MVC 5 尚未在 razor 中支持 netstandard ...希望他们能向我们发送消息,如果这是真的!将节省无尽时间的浪费!但事实真的是这样吗?或者有解决办法吗?

这就是 ASP.NET MVC 5 项目(甚至是针对 4.7.1 的项目)的问题。尽管纯 .cs 代码可以工作(包括在 Controller 中),但对于 razor View (.cshtml 文件)中的任何代码来说,情况并非如此。来自 netstandard 库的 razor View 中引用的任何类型都会完全失败。

为了重现这个问题并确保这不仅仅是我自己的代码,我重现了这个 by making a bran new ASP.NET MVC 5 project (on github)在最新版本的 VStudio 2017(甚至预览版本 15.7.0 Preview 4.0)中,然后创建一个新的 netstandard 项目,其中仅包含几种类型,这样我就可以练习在MVC 5 View 页面。果然,还是失败了。例如,来自 netstandard 项目的这个简单类型:

public enum AnimalType { Cat, Dog, Zebra, Alligator }

如果您将该枚举作为传递到页面的 View 模型中的类型,如果您在 razor 页面中引用该属性,您将收到编译时错误以及运行时错误,并显示:

The type 'Enum' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. AspMvc5WebApp471

正如该存储库中详细介绍的那样,我什至尝试重新编译我自己的 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 版本以在 web.config 中引用它,但是这并没有解决问题。

因此,很高兴听到 ASP.NET 团队或其他任何可能知道如何解决此问题以及该解决方案可能需要什么的人的来信。或者,如果 ASP.NET MVC 5 根本无法与 netstandard 一起使用,那么很高兴知道这是否是消息,以及是否可能会支持 netstandard ASP.NET MVC 5 在不久的将来,或者它是否在某个地方的路线图上?也许到底是什么原因导致了这次失败?当然,最高兴听到是否有可以立即应用的修复程序,但无论哪种方式,我们都需要知道,否则 netstandard 对于我们这些无法应用的人来说基本上毫无用处只需在一天内转储 ASP.NET MVC 5(在现实世界中,正如我们所希望的那样......)非常感谢。

(注1:Net Framework 4.7.1曾被我和其他很多人热切期待,有一段时间据说它会解决很多痛点,但不幸的是它推出了自己的一套endless dll hell like problems ,或参见 hereor hereor here 。例如,参见 System.Net.Http 上的讨论(绑定(bind)重定向不仅会消除所有冲突警告,它们还经常带来自己开发非常痛苦的东西)。现在有些人希望 4.7.2 能够解决所有这些问题,尽管它没有为我解决这些 ASP.NET MVC 5 问题)

最佳答案

我查看了解决方案(很棒的解释@Nicholas Petersen!!),我发现在 Razor 编译时您缺少对 netstandard.dll 的引用(这就是错误的原因)。

我将其添加到编译期间使用的程序集列表中,如下所示:

<add assembly="netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" />

我现在的部分如下所示:

<system.web>
<compilation>
<assemblies>
<add assembly="System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<add assembly="netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" />
</assemblies>
</compilation>
</system.web>

通过这一更改,我能够让 IDE 向我显示 cshtml 文件中模型的 Intellisense 和呈现的页面!

enter image description here

它在 .NET Framework 4.7.1 上运行,我希望它可以在 .NET Framework 4.7.2 上运行。也是如此。

注意:IDE 中仍会出现红色曲线,并显示有关缺少 Enum 类型的错误消息。但由于这不会影响功能(智能感知工作并且代码运行),我希望现在可以接受。

关于asp.net-mvc - .NET 4.7.1 中的 ASP.NET MVC 5 razor View 中引用 netstandard 2.0 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50165910/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com