我在目标中有一些类库项目netstandard2.1
。
当我在 target 中将其引用到我的 WPF 项目时.NET Framework v4.8
,在构建时出现错误:
严重性代码描述项目文件行抑制状态错误项目“..\ClassLibrary1\ClassLibrary1.csproj”针对“netstandard2.1”。它不能被以“.NETFramework,Version=v4.8”为目标的项目引用。应用程序1
我能做什么?
更新:我读这个Q / A有关引用netcoreapp2.1
和有关补充说答案有说服力netstandar2.1
。但是我的图书馆已经在目标中了netstandard2.1
!
我对 .NET Standard 和最近宣布的 .NET Core 3.0 和 ASP.NET Core 3.1 有几个问题
之前版本的.NET Standard与正在发布的 .NET Core 具有相同的主要版本,但对于 .NET Core 3.1,兼容的是 .NET Standard 2.1。
我们是否将旧的 .NET Standard 类库的目标框架从:
<TargetFramework>netstandard2.0</TargetFramework>
Run Code Online (Sandbox Code Playgroud)
到
<TargetFramework>netstandard2.1</TargetFramework>
Run Code Online (Sandbox Code Playgroud)
或更改为
<TargetFramework>netcoreapp3.0</TargetFramework>
Run Code Online (Sandbox Code Playgroud)
并向 Microsoft.AspNetCore.App 添加 FrameworkReference
c# asp.net-core-mvc asp.net-core asp.net-core-3.0 .net-standard-2.1
注:我使用的是VS 2019专业版16.0.2
问题: 我的源代码库在 VS 2017 中运行得很好。但是为了支持 .NET core 3.1,我决定将 VS 2017 升级到 VS 2019。当我在 VS 2019 中开源代码时。它没有显示 .NET标准 2.1 和 .NET Core 3.1 作为目标框架的一部分。当我寻找项目属性时。
当我修改 .csproj 文件<TargetFramework>netcoreapp3.1</TargetFramework>
然后构建时,我得到:
当前的 .NET SDK 不支持面向 .NET Core 3.1。以 .NET Core 2.1 或更低版本为目标,或者使用支持 .NET Core 3.1 的 .NET SDK 版本。
对于另一个项目,当我修改 .csproj 文件<TargetFramework>netstandard2.1</TargetFramework>
然后构建时,我得到:
当前的 .NET SDK 不支持面向 .NET Standard 2.1。以 .NET Standard 2.0 或更低版本为目标,或者使用支持 .NET Standard 2.1 的 .NET SDK 版本。
我尝试过的:
.NET Standard 2.1 …
我netstandard2.1
在netcoreapp3.0
Web应用程序中使用库。在中添加服务时Startup
,出现以下错误:
'无法从程序集'Microsoft.AspNetCore.Mvc.Formatters.Json,版本= 3.0.0.0加载类型'Microsoft.AspNetCore.Mvc.MvcJsonOptions'
我还在Microsoft.AspNetCore.Mvc
类库中使用了2.2.0包中的某些功能。
这是我的图书馆.csproj
,
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
这是ServiceExtensions
我图书馆的课,
public static class ServiceExtensions
{
public static IMvcBuilder AddMyLibrary(this IMvcBuilder builder)
{
builder.Services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
builder.AddJsonOptions(options =>
{
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
});
builder.Services.ConfigureOptions<ConfigureLibraryOptions>();
return builder;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的ConfigureLibraryOptions
课,
public class ConfigureLibraryOptions : IConfigureOptions<MvcOptions>
{
public void Configure(MvcOptions options)
{
options.ModelBinderProviders.Insert(0, new CustomBinderProvider());
}
}
Run Code Online (Sandbox Code Playgroud)
这是ConfigureServices
来自Startup …
c# json.net asp.net-core-mvc asp.net-core-3.0 .net-standard-2.1
我正在尝试使用 Nuget Package Manager 将最新的Microsoft.EntityFrameworkCore
6.0.3 安装到目标类库项目中netstandard2.1
,但收到此错误:
包 Microsoft.EntityFrameworkCore 6.0.3 与 netstandard2.1 (.NETStandard,版本 = v2.1) 不兼容。包 Microsoft.EntityFrameworkCore 6.0.3 支持:net6.0 (.NETCoreApp,Version=v6.0)
谁能帮助我指导解决这个问题?
当我尝试构建一个针对许多框架(包括“.net 6.0”和/或 netstandardX.X Visual Studio 2017)的项目时。即使在安装了 .NET 6.0 后,该主题的错误仍然发生,其中包括:
(x 取决于版本)
此外,解决方案资源管理器的依赖项显示错误(参见屏幕截图)
我安装的sdk与“global.json”文件内容兼容:
{
"sdk": {
"version": "6.0.401",
"allowPrerelease": false,
"rollForward": "feature"
}
}
Run Code Online (Sandbox Code Playgroud)
整个错误消息:
严重性代码 说明 项目文件行抑制状态错误 MSB3644 找不到框架“.NETFramework,Version=v6.0”的参考程序集。要解决此问题,请安装此框架版本的 SDK 或 Targeting Pack,或者将您的应用程序重新定位到已安装 SDK 或 Targeting Pack 的框架版本。请注意,程序集将从全局程序集缓存 (GAC) 中解析,并将用于代替引用程序集。因此,您的程序集可能无法正确定位您想要的框架。
但此消息也适用于所有丢失或无法识别的依赖项。
.csproj 文件(目标框架):
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.1;netstandard2.0;net45;net48;netstandard1.5;net40;net35;net20;net6.0</TargetFrameworks>
</PropertyGroup
<PropertyGroup Condition="'$(TargetFramework)' == 'net20' ">
<DefineConstants>$(DefineConstants);LEGACY</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' == 'net35' ">
<DefineConstants>$(DefineConstants);LEGACY</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' == 'net40' ">
<DefineConstants>$(DefineConstants);LEGACY</DefineConstants>
</PropertyGroup> …
Run Code Online (Sandbox Code Playgroud) target-framework visual-studio-2017 .net-standard-2.0 .net-standard-2.1 .net-6.0
public class Class1
{
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
}
}
Run Code Online (Sandbox Code Playgroud)
请为这两个接口添加什么引用?或者你应该只在网站项目中使用这些接口?
.NET Core 3.1 类库的结果也相同。视觉工作室 16.4.4
非常感谢任何帮助。
我正在使用 dot net standard 2.1 和 c# 8,我想为我的类(接口)创建一个事件,我按照本教程 编写了一个接口:
using System;
using Crawler.Paging;
namespace Crawler
{
public interface ICrawler
{
public event EventHandler NextPage;
protected virtual void OnNextPage(EventArgs e)
{
EventHandler handler = NextPage;
handler?.Invoke(this,e);
}
void Paging(IPaging paging);
}
}
Run Code Online (Sandbox Code Playgroud)
但请告诉我一个错误:
错误事件“ICrawler.NextPage”只能出现在+=或-=的左侧
我继续进行了这个训练,那么问题出在哪里呢?
我有一个使用 .Net Standard 2.1 开发的 C# 库,并且在基于 .Net Core 3.0 构建的测试控制台应用程序中调用该库。但在运行时,GetFactory 抛出异常。
private DbConnection connection;
connection = DbProviderFactories.GetFactory("MySql.Data.MySqlClient").CreateConnection();
Run Code Online (Sandbox Code Playgroud)
例外:
DbProviderFactories.GetFactory 在注册的 .NET 数据提供程序列表中找不到指定的不变名称“MySql.Data.MySqlClient”。
我已经安装了MySqlConnector 1.2.1。但这没有帮助。并在 app.config 文件中添加以下内容。
<system.data>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=8.0.23.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
Run Code Online (Sandbox Code Playgroud) c# ×5
.net ×2
.net-4.8 ×1
.net-6.0 ×1
asp.net-core ×1
c#-8.0 ×1
ef-core-6.0 ×1
json.net ×1
mysql ×1
nuget ×1