.NET 4.7.1中的ASP.NET MVC 5 razor视图中的参考netstandard 2.0类型

时间:2018-05-04 01:32:22

标签: asp.net-mvc razor .net-standard

.NET 4.7.1应该解决我们从完整框架引用netstandard 2.0库时遇到的问题。尽管有一些持续且痛苦的dll冲突警告和相关问题,并且需要手动更新到PackageReferences(see this wondeful extension),但确实如此。尽管如此,人们可以让它工作,但请参阅下面的注释1,如果我可以说:至少可以说没有VStudio帮助或对此及相关问题有很多指导是不幸的,到现在为止必须找到这样的帮助github上的后台频道。理想情况下,这个问题本身就会被告知:ASP.NET MVC 5还不支持razor中的netstandard ...希望他们只是告诉我们如果是真的!会节省无尽的浪费时间!那是这样的吗?还是有修复?

这就是ASP.NET MVC 5项目的问题(甚至是那些以4.7.1为目标的项目)。虽然普通.cs代码有效,包括在控制器中,但对于剃刀视图(.cshtml文件)中的任何代码,为真。来自netstandard库的剃刀视图中引用的任何类型都完全失败。

要重现此问题并确保它不仅仅是我自己的代码,我在最新版本的VStudio 2017(甚至是预览版,15.7.0预览版4.0)中再现了这个by making a bran new ASP.NET MVC 5 project (on github),然后制作一个只有几种类型的新netstandard项目,所以我可以练习在MVC 5视图页面中引用这些类型。果然,它仍然失败。例如,netstandard项目中的这种简单类型:

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

如果你将视图模型中的一个类型传递给页面,如果你在剃刀页面中引用了该属性,你将得到编译时错误,并且还会在运行时说:

  

类型' Enum'在未引用的程序集中定义。您必须添加对程序集&net; netstandard,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = cc7b13ffcd2ddd51'的引用。 AspMvc5WebApp471

同样在repo中详细说明,我甚至尝试重新编译我自己的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引起了我自己和许多其他人的热切期待,因为有人说它会解决许多痛点,但遗憾的是它已经引入了自己的一套{{3或者看到endless dll hell like problemshereor here。例如,请参阅有关System.Net.Http的讨论(并且绑定重定向不只是删除所有冲突警告,它们通常提出他们自己的,非常痛苦的事情。现在有些人一直希望4.7.2可以解决所有这些问题,虽然它并没有为我解决这些ASP.NET MVC 5问题)

1 个答案:

答案 0 :(得分:14)

我查看了解决方案(很棒的解释@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中仍会出现红色波形,并且缺少有关枚举类型的错误消息。但由于这不影响功能(智能感知工作和代码运行),我希望现在可以接受。