像这样:
一个解决方案(我想这一定是ASP.NET Core吗?)
答案 0 :(得分:2)
是的,只要您不打算在非Windows环境中托管,就可以。
但是,ASP.NET Core 2.1应用程序必须 target .NET Framework 4.6.1或更高版本,尽管它仍然可以 引用 .NET Framework 4.5.1类库。
如果要切换目标框架,只需修改.csproj
文件。
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net461</TargetFramework>
</PropertyGroup>
</Project>
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
</Project>
注意:您无法轻松地来回切换。无论何时切换,都必须还原NuGet软件包。
第二个选项 是ASP.NET Core 2.1应用程序目标 .NET Core 2.1,仍然是引用 .NET框架4.5.1类库。
我更喜欢此选项,因为当您以后将类库重写为目标.NET Standard或.NET Core时,无需对ASP.NET应用程序进行任何更改。
答案 1 :(得分:2)
该解决方案与所使用的目标框架无关。目标框架适用于项目,因此您可以使每个项目目标都在解决方案中有所不同,而从解决方案的角度来看,蹲下无关紧要。
出现问题的地方是当您具有项目依赖项时。为了依赖于以不同框架为目标的项目,所使用的所有框架都必须以某种方式彼此兼容。例如,您可以从.NET 4.7项目中引用.NET 4.6项目,因为最终.NET 4.7是4.6的超集。
更直接地讲.NET Core,尤其是您的方案,不,您不能从.NET Core 2.1项目中引用.NET 4.5.1项目,但是 您可以引用.NET。 NET 4.6.1项目。这里的问题是,.NET Core处理.NET Framework依赖项的能力取决于.NET Standard。 .NET Standard 2.0是第一个支持.NET Core和.NET Framework之间互操作的版本,至少需要.NET Core 2.0和.NET Framework 4.6.1。如果您可以将该项目的目标定位为至少4.6.1,则可以,可以对其进行引用。
但是,.NET Framework包含.NET Standard不包含的内容,因此.NET Core不包含的内容。即使Visual Studio允许您添加引用,它也不保证可以全部实际上使用库的全部甚至部分内容。实际上,添加引用后,您会收到关于此效果的警告。您需要验证该依赖项是否正常运行,然后可以在此时取消警告。
大多数情况下,会使您失望的是特定于平台的Windows API。例如,System.Drawing
是一个问题,因为.NET Core是跨平台的,其中System.Drawing
使用Windows特定的API。在某些情况下,只要您的应用与Windows保持牢固的联系,您仍然可以利用这些不兼容的库。再次以System.Drawing
为例,有一个CoreCompat软件包,可让您使用.NET Core项目中的System.Drawing
,这意味着您可以长时间使用使用System.Drawing
的库在Windows上构建并运行 时。如果您尝试将您的应用程序带到Linux,它会崩溃。不过,您可以使用编译器指令填充专门针对Linux和Mac的不同代码来补偿。
长短不一,这里没有一成不变的“是”或“否”的答案。您需要进行一些广泛的测试,以确保一切正常。如果事情确实中断了,您可能会 能够获得Microsoft兼容软件包之一的支持,但是除非替换需要的代码,否则您将无法脱离Windows。这为您提供了一些喘息的升级空间,但是不要指望会因为它允许您添加依赖关系而获得.NET Core的所有应许和魅力。
答案 2 :(得分:0)
您不需要添加目标框架,只需将项目添加到.csproj文件中,就可以将项目作为一个包引用到.Net核心:
<ItemGroup>
<Reference Include="MyProjectName">
<HintPath>path_to_the_project/MyProjectName.dll</HintPath>
</Reference>
</ItemGroup>
完成后,删除.Net Core项目中的bin文件夹,还原软件包,重建项目,然后就可以了。
希望您会发现这很有用。