【问题标题】:'Forms' does not exist in the namespace system.windows命名空间 system.windows 中不存在“表单”
【发布时间】:2011-10-02 03:21:35
【问题描述】:

我刚刚开始研究 c#,并且正在摆弄我从某个论坛获得的一些代码示例。

此代码正在使用命名空间 using system.windows.forms,对此我收到错误消息:

命名空间 system.windows 中不存在表单。

此外,我还收到了一些与 senddownsendup 的未定义函数相关的错误,我认为这些错误位于 Forms 命名空间中。

我正在使用 Visual Studio 10(带有 .net 框架工作 4.0)。知道如何解决此错误吗?

【问题讨论】:

  • 添加对System.Windows.Forms的引用
  • 听起来您创建的是 WPF 项目而不是 Windows 窗体项目
  • @todda,谢谢,这行得通 :) @shf301,是的,它是一个 WPF 项目,但添加提到的参考是可行的。
  • 为了将来参考,在询问 SO 问题时,请粘贴 exact 代码,该代码非常区分大小写...
  • @sara 关于你的赏金,你在这里寻找什么样的答案?您需要哪些“官方资源”?问题已明确回答:您不能使用未添加引用的命名空间中的项目。您是否正在寻找具有相同观点的语言标准引文?

标签: c# winforms


【解决方案1】:

在解决方案树中展开项目,在ReferencesAdd Reference右键单击,在Framework 选项卡上选择System.Windows.Forms

您有时需要添加对一些非默认程序集的引用。

来自 cmets:对于寻找 VS 2019+ 的人:现在在Solution Explorer 中的Dependencies右键单击

对于寻找 VS Code 的人:How do I add assembly references in Visual Studio Code

【讨论】:

  • 好的。我的印象是我已经添加了它。刚刚再次检查它,正如预期的那样,它丢失了。谢谢:)
  • 右击Project下的References节点。
  • @naXa 从那时起事情发生了变化,是的
  • 对于寻找 VS 2019 的人们的更新 - 现在添加项目引用是在解决方案资源管理器中右键单击 Dependencies
  • @VMAtm 很抱歉给您带来不便。我将vscode与unity一起使用。我正在引用统一按钮,就好像它是一个 Windows 应用程序按钮一样。因此出现错误。
【解决方案2】:

如果有人在尝试在 .NET Core 3+ WPF 应用程序中引用 Windows 窗体 组件时遇到此错误(这实际上并不少见),解决方案是进入 @987654321 @ 文件(在 VS2019 中双击它)并将其添加到包含目标框架的属性组节点。像这样:

<PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <UseWPF>true</UseWPF>
    <UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>

【讨论】:

  • 这正是对我有用的解决方案。我看到的许多提议的解决方案都建议添加对“System.Window.Forms”的引用,但该提议对我从未奏效。我能够添加该引用并解决我丢失的 Forms 类,但是通过添加该引用,它破坏了“System.Window”
  • 奇怪,它在一台计算机上工作,但在另一台计算机上打开,它就失败了。解决方案是 UseWindowsForms 标签。您可能会认为 .net 核心中的 Windows 窗体存在问题,Visual Studio 会在查找错误和让您在 gui 中添加窗体而无需关闭、手动编辑和重新加载时提供更有用的东西...
  • 谢谢。另外,我有必要将 targetframework 从 net5.0 更改为 net5.0-windows。
【解决方案3】:

如果您在 .Net Core 应用程序中编写 Windows 窗体 代码,那么您很可能会遇到此错误:

错误 CS0234 命名空间“System.Windows”中不存在类型或命名空间名称“Forms”(您是否缺少程序集引用?)

如果您使用的是 Sdk 样式的项目文件(推荐),您的 *.csproj 文件应该类似于:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <OutputType>WinExe</OutputType>
    <UseWindowsForms>true</UseWindowsForms>
    <RootNamespace>MyAppNamespace</RootNamespace>
    <AssemblyName>MyAppName</AssemblyName>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Windows.Compatibility" Version="3.0.0" />
  </ItemGroup>
</Project>

请特别注意以下几行:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<OutputType>WinExe</OutputType>
<UseWindowsForms>true</UseWindowsForms>
<PackageReference Include="Microsoft.Windows.Compatibility" Version="3.0.0" />

请注意,如果您在引用某些 WinForms 库时使用 WPF,则还应添加 &lt;UseWPF&gt;true&lt;/UseWPF&gt;

提示:从 .NET 5.0 开始,微软建议使用 SDK Microsoft.Net.Sdk 代替 Microsoft.Net.Sdk.WindowsDesktop

【讨论】:

    【解决方案4】:

    净值 >= 5

    <TargetFramework>
       net5.0-windows
    </TargetFramework>
    

    引用Announcing .NET 5.0:

    Windows 桌面 API(包括 Windows 窗体、WPF 和 WinRT)将仅在面向 net5.0-windows 时可用。您可以指定操作系统版本,例如 net5.0-windows7 或 net5.0-windows10.0.17763.0(适用于 Windows 2018 年 10 月更新)。如果要使用 WinRT API,则需要以 Windows 10 版本为目标。

    在您的项目中:

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>WinExe</OutputType>
        <TargetFramework>net5.0-windows</TargetFramework>
        <UseWindowsForms>true</UseWindowsForms>
      </PropertyGroup>
    
    </Project>
    

    也很有趣:

    • net5.0 是 .NET 5.0 的新目标框架名字对象 (TFM)。
    • net5.0 结合并替换了 netcoreapp 和 netstandard TFM。
    • net5.0 支持 .NET Framework 兼容模式
    • net5.0-windows 将用于公开特定于 Windows 的功能,包括 Windows 窗体、WPF 和 WinRT API。
    • .NET 6.0 将使用与 net6.0 相同的方法,并将添加 net6.0-ios 和 net6.0-android。
    • 特定于操作系统的 TFM 可以包含操作系统版本号,例如 net6.0-ios14。
    • 可移植 API,如 ASP.NET Core 将可用于 net5.0。使用 net6.0 的 Xamarin 表单也是如此。

    【讨论】:

      【解决方案5】:

      如果您在一个解决方案中有多个项目并且其中一个实际位于解决方案文件夹中,您可能会遇到此问题。 我通过右键单击解决方案树中的这个文件夹来解决这个问题 -> 然后按“从项目中排除”

      【讨论】:

        【解决方案6】:
        browxy.com 
        Compilation failed: 1 error(s), 0 warnings
        main.cs(7,24): error CS0234: The type or namespace name `Forms' does not exist in the namespace `System.Windows'. Are you missing `System.Windows.Forms' assembly reference?
        

        【讨论】:

        • 这不是答案。
        猜你喜欢
        • 2022-07-07
        • 2016-07-26
        • 2022-01-11
        • 2014-03-04
        • 2016-02-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多