问题
I am trying to make a console application so as to troubleshoot my question here
I have put the source on Git Hub
The console application project file is
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFrameworks>netcoreapp3.1;net472</TargetFrameworks>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\mopcore\MopCore.csproj" />
<ProjectReference Include="..\MopFW\MopFW.csproj" />
</ItemGroup>
</Project>
Program.cs is
using System;
using System.Linq;
using MopCore;
using MopFW; // error shows here
namespace ConsoleAppCore2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
CountMopsCore();
CountMopsFramework();
}
private static void CountMopsCore()
{
Console.WriteLine($"Hi");
using (var context = new MopContext())
{
var num = context.Mops.Count();
Console.WriteLine($"There are {num} mops \r\n providern {context.Database.ProviderName}");
}
Console.ReadKey();
}
private static void CountMopsFramework()
{
Console.WriteLine($"Hi");
using (var context = new MopFW.MopContext())
{
var num = context.Mops.Count();
Console.WriteLine($"There are {num} mops \r\n in {context.Database.Connection.ConnectionString}");
}
Console.ReadKey();
}
}
}
The netcoreapp3.1 project file is
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<AssemblyName>MopCore</AssemblyName>
<RootNamespace>MopCore</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.4" />
</ItemGroup>
</Project>
The framework project file is
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="EntityFramework" Version="6.4.4" />
</ItemGroup>
</Project>
I get build errors
Error NU1201 Project MopCore is not compatible with net472 (.NETFramework,Version=v4.7.2). Project MopCore supports: netcoreapp3.1 (.NETCoreApp,Version=v3.1) ConsoleAppCore2 C:\Users\kirst\source\repos\MopData\ConsoleAppCore2\ConsoleAppCore2.csproj 1
[Update] I understand that the best way would be to use .netstandard
However I want to explore just getting .netcore and .net472 to work together.
After correcting the console project to be
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFrameworks>netcoreapp3.1;net472</TargetFrameworks>
</PropertyGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'netcoreapp3.1' ">
<ProjectReference Include="..\mopcore\MopCore.csproj" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'net472' ">
<ProjectReference Include="..\MopFW\MopFW.csproj" />
</ItemGroup>
</Project>
I still get build errors in program.cs
回答1:
You need to conditional reference the projects
In your csproj:
<ItemGroup Condition=" '$(TargetFramework)' == 'netcoreapp3.1' ">
<ProjectReference Include="..\mopcore\MopCore.csproj" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'net472' ">
<ProjectReference Include="..\MopStandard\MopFW.csproj" />
</ItemGroup>
OR you need to make MopCore also compatible for net472. E.g. implement netstandard2.0.
来源:https://stackoverflow.com/questions/62256011/nu1201project-is-not-compatible-with-net472-when-a-netcore-dll-is-referenced-f