Nic*_*sen 14 asp.net-mvc razor .net-standard
.NET 4.7.1应该解决我们netstandard 2.0
从完整框架引用库时遇到的问题.尽管有一些持续且痛苦的dll冲突警告和相关问题,并且需要手动更新到PackageReferences(参见这个奇妙的扩展),但确实如此.尽管如此,人们可以得到它的工作,但看到下面的注意事项1,如果我可以说:这是不幸的,至少可以说,还没有关于这个问题和相关问题没有VStudio帮助或太多指导,至今人们必须找到这样的帮助github上的后台频道.理想情况下,这个问题本身就会被告知:ASP.NET MVC 5还不支持razor中的netstandard ...希望他们只是告诉我们如果是真的!可以节省无尽的浪费时间!那是这样的吗?还是有修复?
这就是ASP.NET MVC 5项目的问题(甚至是那些针对4.7.1的项目).虽然普通的.cs代码可以工作,包括在控制器中,但对于剃刀视图(文件)中的任何代码都不是这样.cshtml
.来自netstandard
库的razor视图中引用的任何类型都完全失败.
要重现此问题,并确保它不只是我自己的代码,我转载此通过使麸皮新的ASP.NET MVC 5项目(在GitHub上)在2017年VStudio(甚至是预览版,15.7.0的最新版本预览4.0),然后在其中创建一个netstandard
只包含几种类型的新项目,这样我就可以在MVC 5视图页面中练习引用这些类型.果然,它仍然失败.例如,netstandard项目中的这种简单类型:
public enum AnimalType { Cat, Dog, Zebra, Alligator }
Run Code Online (Sandbox Code Playgroud)
如果您将视图模型中的类型传递到页面中,如果您在剃刀页面中引用该属性,则会出现编译时错误,并且在运行时也会出现这样的错误:
"Enum"类型在未引用的程序集中定义.您必须添加对程序集'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框架4.7.1是热盼由我和其他许多人,但不幸的是它已经推出了自己的一套无尽的DLL地狱一样的问题,或者看到这里,或者在这里,或者在这里.例如,参见讨论System.Net.Http
(并且绑定重定向不只是删除所有的冲突警告,它们经常提出他们自己的,非常痛苦的东西).现在有些人一直希望4.7.2会解决所有这些问题,虽然它没有为我解决这些ASP.NET MVC 5问题)
Ale*_*SFT 17
我看了解决方案(很棒的解释@Nicholas Petersen !!)我看到在Razor编译时你错过了对netstandard.dll的引用(这就是错误的意思).
我将它添加到编译期间使用的程序集列表中,如下所示:
<add assembly="netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" />
Run Code Online (Sandbox Code Playgroud)
我现在的部分看起来像这样:
<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>
Run Code Online (Sandbox Code Playgroud)
通过这个改变,我能够让IDE在cshtml文件中向我展示模型的Intellisense并呈现页面!
这是在.NET Framework 4.7.1上运行的,我希望这可以在.NET Framework 4.7.2上运行.同样.
注意:IDE中仍会出现红色波形,并且缺少有关枚举类型的错误消息.但由于这不影响功能(智能感知工作和代码运行),我希望现在可以接受.
归档时间: |
|
查看次数: |
3148 次 |
最近记录: |