c# - 当从多框架控制台应用程序引用 .netcore dll 时,NU1201 项目与 net472 不兼容
问题描述
我正在尝试制作一个控制台应用程序,以便在这里解决我的问题
我已将源代码放在Git Hub上
控制台应用程序项目文件是
<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 是
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();
}
}
}
netcoreapp3.1 项目文件是
<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>
框架项目文件是
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="EntityFramework" Version="6.4.4" />
</ItemGroup>
</Project>
我得到构建错误
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
[更新] 我知道最好的方法是使用 .netstandard
但是我想探索让 .netcore 和 .net472 一起工作。
将控制台项目更正为
<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>
解决方案
您需要条件引用。
在你的 csproj 中:
<ItemGroup Condition=" '$(TargetFramework)' == 'netcoreapp3.1' ">
<ProjectReference Include="..\mopcore\MopCore.csproj" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'net472' ">
<ProjectReference Include="..\MopStandard\MopFW.csproj" />
</ItemGroup>
或者你需要让 MopCore 也兼容 net472。例如实现netstandard2.0。
推荐阅读
- angular - 反应式表单没有标记为无效,即使它的控件被标记为无效,为什么?
- python - 如何用python提取一些没有html标签的文本
- firefox - Firefox 构建给出“[Parent][RunMessage] 错误:通道关闭:发送/接收太晚,消息将丢失”
- python - 通过 API 获取 OneNote 时间戳
- java - Android MediaPlayer:Android Q 及更高版本中的文件访问
- javascript - 当我的 JavaScript 依赖于以前加载的脚本中的对象时,我如何`eslint`?
- python - 激活 conda 环境后我是否必须激活 venv 才能使 pip 正常工作?
- css - reactstrap - 我怎样才能改变颜色
的(点击左右滑动照片的小箭头)? - angular - SpringBoot 后端和 Angular 前端之间的实时绑定
- c - fread 超过 8 个字节的动态分配的缓冲区失败