Which Class Lib for ASP.NET Core tag helpers when .Net Core Web App targets Full .Net Framework?
我创建了一个以.NET框架为目标的ASP.NET核心Web应用程序。这是通过使用Visual Studio ASP.NET核心Web应用程序(.NET框架)模板完成的。
我想创建一些在这个Web应用程序中使用的标记帮助器,并将它们放在库DLL中。最初,我尝试将一个新项目添加到类型类库(.net core)的解决方案中以放置它们,但无法从Web项目引用该库。当我试图通过Visual Studio引用它时,我收到一个对话框,其中说不支持项目引用,因为类库的目标框架与我的网站项目中的目标不兼容。
因此,作为替代方案,我通过Visual Studio类库模板向解决方案添加了一个常规类库项目。我可以成功地将Web项目中的引用添加到此类库。然而,在这个类库项目中,我找不到引用Microsoft.AspNetCore.Razor.Runtime的方法,如果我想把标签助手放在类库中,这是必需的。
所以我对这两种方法都不感兴趣。如何将我的ASP.NET核心标记帮助器放在一个类库中,我可以从面向完整.NET框架的ASP.NET Web项目中引用该类库?
0
这通常意味着两个库都针对不同的东西,即如果类库针对netstandard1.6,而Web应用程序针对net452,那么它将不起作用。
要么您的Web应用程序需要以netcoreapp1.0为目标,要么您的类库必须以netstandard1.0为目标。使用这里的.NET标准库矩阵查看哪个netstandard1.x名字对象支持哪个平台。
因此,如果您的Web应用程序以net452为目标,则必须以netstandard1.0、netstandard1.1或netstandard1.2为目标。netstandard1.3及更高版本不起作用,因为它需要.NET Framework 4.6。
如果使用的库需要netstandard1.3或更高版本,则必须针对多个平台。即net452和netstandard1.3。
然后,net452将用于以net452为目标的项目,netstandard1.3将用于netcoreapp1.0应用程序或其他以netstandard为目标的类库。
- 我太感谢你了。这正是我做错的。我的web应用程序针对的是net452,我的类库针对的是netstandard1.6。一旦我把我的类库改成针对netstandard1.0的类库,它就起作用了。当我把它撞到netstandard1.1时它也起作用了,谢谢!感谢您链接到.NET标准库矩阵。这个netstandard的东西仍然很混乱,但我开始得到你的帮助!
- 还有一个问题,如果我的库以netstandard1.1为目标,我怎么能让它引用以net4.5为目标的库呢?从图表上看,这是可能的,但当我尝试时,我得到了关于两个目标框架不兼容的对话。
- @RONC:你不能这样做,因为不能保证NET 4.5库可以使用对.NET核心或.NET标准所涵盖的其他平台不可用的API。.NET标准设置了矩阵中列出的平台所支持的最小API集。在这种情况下,您需要执行多目标(target net45和netstandard1.1),并使用if预编译器指令来确保仅在完整的.NET框架中工作的API不会编译为库的netstandard版本。
- 然而,在.NET标准2.0中会有一个突破性的变化,有点像。NetStandard 1.5和1.6将不再兼容,因为只有在.NET 4.6.2和未发布的.NET 4.6.3中才能使用的某些API将从NetStandard 2.0中删除,但.NET 4.x中的更多API将添加到NetStandard中。有关即将发布的netstandard 2.0 blogs.msdn.microsoft.com/dotnet/2016/09/26/&hellip的更多详细信息,请参阅此msdn博客文章;(不过,1.5和1.6中提供的API可能会在netstandard 2.1中提供)