【发布时间】:2018-05-04 01:32:21
【问题描述】:
.NET 4.7.1 应该解决我们在从完整框架中引用 netstandard 2.0 库时遇到的问题。尽管有一些持续和痛苦的 dll 冲突警告和相关问题,并且需要手动更新到 PackageReferences (see this wondeful extension),但它确实做到了。尽管如此,人们可以让它工作,虽然见下面的注释 1,如果我可以说:不幸的是,至少可以说在这个和相关问题上没有 VStudio 帮助或太多指导,直到现在人们必须找到这样帮助在 github 上的后台频道。理想情况下,这个问题本身会得到消息:ASP.NET MVC 5 尚不支持剃须刀中的 netstandard ......希望他们只会向我们发送消息,如果是真的!将节省无尽浪费的时间!但真的是这样吗?或者有什么解决办法?
这就是 ASP.NET MVC 5 项目的问题(即使是那些针对 4.7.1 的项目)。尽管普通的 .cs 代码可以工作,包括在控制器中,但对于 razor 视图(.cshtml 文件)中的任何代码,这不是正确的。来自netstandard 库的剃刀视图中引用的任何类型都完全失败。
为了重现这个问题并确保它不仅仅是我自己的代码,我在最新版本的 VStudio 2017(甚至是预览版,15.7.0 Preview 4.0)中重现了这个by making a bran new ASP.NET MVC 5 project (on github),然后制作了一个新的@ 987654333@ 项目中只有几个类型,所以我可以练习在 MVC 5 视图页面中引用这些类型。果然,它仍然失败。例如,来自 netstandard 项目的这个简单类型:
public enum AnimalType { Cat, Dog, Zebra, Alligator }
如果您在传递给页面的视图模型中将该枚举作为类型,如果您曾经在剃刀页面中引用该属性,您将收到编译时错误,并且在运行时也会出现:
“枚举”类型是在未引用的程序集中定义的。您必须添加对程序集“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 一起使用,那么很高兴知道这是否是消息,如果在不久的将来 ASP.NET MVC 5 可能会支持 netstandard,或者如果它在某个地方的路线图上?也许究竟是什么导致了这次失败?当然,最高兴听到是否有可以立即应用的修复程序,但无论哪种方式,我们都需要知道,否则netstandard 对于我们这些不能只转储 ASP.NET 的人来说基本上没用一天完成 MVC 5 (在现实世界中,我们想尽可能多地......)非常感谢。
(注1:Net Framework 4.7.1被我和很多人热切期盼,曾经有段时间说能解决很多痛点,可惜引入了自己的一套endless dll hell like problems ,或参见here、or here、or here。例如,参见System.Net.Http 上的讨论(绑定重定向不只是删除所有冲突警告,它们通常会带来自己的、非常痛苦的东西)。现在有些人一直希望 4.7.2 能够解决所有这些问题,尽管它并没有为我解决这些 ASP.NET MVC 5 问题)
【问题讨论】:
-
你试过直接引用netstandard.dll吗?
-
但也许还有需要参考的地方。但是,为什么其他一切仍然有效(除剃刀之外的所有其他代码)?因此,连同上述观点,我坚信这不仅仅是缺少包裹或其他东西。如果有的话,也许它的
Microsoft.CodeDom.Providers.DotNetCompilerPlatform需要更新,虽然我真的不知道,并且希望有来自 ASP.NET 团队的人或有知识的人在这里加入 -
顺便说一句,我还尝试将
NETStandard.Library从nuget安装到ASP.NET MVC项目中,它实际上安装了两个东西:NETStandard.Library.2.0.2和Microsoft.NETCore.Platforms.1.1.0它没有工作或做任何事情不同的。它并没有(有点令人惊讶)引发额外的错误,但尽管如此,它没有任何帮助。我还了解到在这个位置有一个netstandard.dll:C:\Program Files (x86)\Microsoft SDKs\NuGetPackagesFallback\NETStandard.Library\2.0.1\build\netstandard2.0\ref\netstandard.dll。引用也没有做任何事情。 -
是的!正如我在主帖中所说,它在这里:github.com/copernicus365/AspMvc5NetstandardCompatibility 感谢您对这个问题感兴趣!
标签: asp.net-mvc razor .net-standard