【问题标题】:Visual Studio Windows Forms Designer ErrorVisual Studio Windows 窗体设计器错误
【发布时间】: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 所在的库中将 &lt;TargetFrameworks&gt;netstandard2.1;net472&lt;/TargetFrameworks&gt; 更改为 &lt;TargetFrameworks&gt;net472;netstandard2.1&lt;/TargetFrameworks&gt; 是否有效?
  • 做到了!如果你问我,这是 Microsoft 的错误。根据thisnetstandard2.1 应该排在第一位。但是,当我将net472 放在首位时,一切正常。我还验证了它仍然适用于我的 .NET Core 3.1 库和应用程序。
  • 同样的问题,在解决方案中找到了 2 个项目,并恢复了框架顺序。遵循建议,但问题仍然存在。清理、重建、重启 VS

标签: c# winforms .net-standard-2.1


【解决方案1】:

肖恩·斯凯利解决了这个问题。为了让一切正常工作,.csproj 文件应如下所示:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>net472;netstandard2.1</TargetFrameworks>
  </PropertyGroup>

</Project>

我还验证了 .NET Standard 和 .NET Core 应用程序和库与此 .csproj 文件兼容。

【讨论】:

  • 不幸的是,虽然这种方法确实有效,但并不是每个人都可以使用。例如,如果程序集将由 Xamarin(一种旧式项目格式)引用,则 nestandard 必须首先出现,因为不知道新项目系统的项目类型只能“看到”列出的第一个目标。我确实在开发者社区提交了一个问题来解决这个问题,这可能会使用你的投票:developercommunity.visualstudio.com/t/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-15
相关资源
最近更新 更多