【发布时间】:2020-04-03 18:28:30
【问题描述】:
我正在 Visual Studio 2019 中开发面向 .NET Standard 2.1 和 .NET Framework 4.7.2 的 .NET Standard 类库。我希望它与 WinForms .NET Framework 和 WPF .NET Core 3.1 兼容。它的依赖项之一是 Entity Framework 6.4——它只适用于 .NET Standard 2.1 或 .NET Framework 4.7.2——所以我不能降级到 .NET Standard 2.0 以与 .NET Framework 兼容。因此,我的类库同时针对两者。
这是 .NET Standard 库的 .csproj 文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.1;net472</TargetFrameworks>
</PropertyGroup>
</Project>
在 .NET Standard 库中,我创建了一个名为“NetStandardClass”的类。代码如下:
public class NetStandardClass
{
private string _member;
public NetStandardClass(string member)
{
_member = member;
}
}
我创建了一个面向 .NET Framework 4.7.2 的 WinForms 应用。并引用 .NET Standard 库。我创建了 2 个表单:创建 NetStandardClass 实例的 BaseForm 和派生自 BaseForm 的 Form1。
这是 BaseForm 的代码:
public partial class BaseForm : Form
{
public BaseForm()
{
InitializeComponent();
var netStandardObject = new NetStandardClass("Test");
}
}
这是 Form1 的代码:
public partial class Form1 : BaseForm
{
public Form1()
{
InitializeComponent();
}
}
一切都编译并运行,没有错误。 Form1 显示没有错误。我可以毫无问题地将 BaseForm 加载到设计器中。
但是,当我尝试将 Form1 加载到设计器中时,我收到以下错误:
无法加载文件或程序集 'netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' 或其依赖项之一。系统找不到指定的文件。
我做错了什么?
【问题讨论】:
-
这是同一个问题吗? stackoverflow.com/questions/57779738/…
-
我不这么认为。如果它是相同的,那么我的应用程序应该在运行时得到错误。此错误仅发生在 Visual Studio 设计器中。
-
搜索了一下,发现this thread。对于至少一个人来说,切换项目定义中针对的框架的顺序解决了这个问题。也就是说,如果您在 NetStandardClass 所在的库中将
<TargetFrameworks>netstandard2.1;net472</TargetFrameworks>更改为<TargetFrameworks>net472;netstandard2.1</TargetFrameworks>是否有效? -
做到了!如果你问我,这是 Microsoft 的错误。根据this,
netstandard2.1应该排在第一位。但是,当我将net472放在首位时,一切正常。我还验证了它仍然适用于我的 .NET Core 3.1 库和应用程序。 -
同样的问题,在解决方案中找到了 2 个项目,并恢复了框架顺序。遵循建议,但问题仍然存在。清理、重建、重启 VS
标签: c# winforms .net-standard-2.1