我有一个控制台应用程序,我只想在某个时候显示MessageBox.

我找到一个页面,该页面声明我可以通过添加对程序集的引用来完成此操作.然而,仅仅添加using System.Windows.Forms是不起作用的(CS02348:它不存在于名称空间中,我可能缺少程序集引用).

然而,我似乎只能将COM引用添加到我的项目.当我寻找一种显示组装面板的方法时,我发现this page似乎表明我应该已经拥有它.

根据this tutorial,我应该在C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App中手动浏览和查找.

我试着用C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\7.0.2\System.Windows.Forms.dllC:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\6.0.13\System.Windows.Forms.dll.对于这两个参数,我得到错误CS1705:

错误CS1705具有标识的程序集‘System.Windows.Forms’ ‘System.Windows.Forms,版本=7.0.0.0,区域性=中性, PublicKeyToken=b77a5c561934e089‘使用’系统运行时, 版本=7.0.0.0,区域性=中性,PublicKeyToken=b03f5f7f11d50a3a‘ 它的版本高于引用的程序集"System.Runtime" 身份为‘System.Runtime,版本=6.0.0.0,区域性=中性, Public KeyToken=b03f5f7f11d50a3a‘

我刚刚删除了手动导入的System.Windows.Forms.dll,我的*.csproj文件如下所示:

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

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <Reference Include="RandomLibrary">
      <HintPath>RandomLibrary.dll</HintPath>
    </Reference>
  </ItemGroup>

</Project>

我需要它留在LTS的6.0版本中.

为什么我没有这个装配卡舌? 如何添加对System.Windows.Forms的引用?为什么我在版本6.0.13和版本7.0.2中收到相同的消息?

推荐答案

您不必在依赖项中添加任何内容或手动引用任何dll.您只需在csproj文件中添加几行.

以下是由Visual Studio中的控制台应用程序向导生成的最新版本:

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

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>

如果您想使用Win Forms,请对其进行如下修改(在项目上单击鼠标右键, Select "卸载项目"或在文本编辑器中手动编辑它):

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

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0-windows</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <UseWindowsForms>true</UseWindowsForms>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>

请注意,在net6.0之后加上-windows以及<UseWindowsForms>true</UseWindowsForms>.

然后,您可以使用WIN表单并查看控制台输出:

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
string message = "Hello,";
string caption = "World!";

MessageBoxButtons buttons = MessageBoxButtons.YesNo;
DialogResult result;

// Displays the MessageBox.
result = MessageBox.Show(message, caption, buttons);

enter image description here

或者,您可以按照用户09938的链接中的答案建议并创建一个WinForms项目,然后进入属性并将第一个框(输出类型)从Windows应用程序更改为控制台应用程序.

Csharp相关问答推荐

WPF文本框点击鼠标 Select 内容

如何在C#中使用并行主义将数据表转换为动态对象

处理. netstandard2.0项目中HttpClient.SslProtocol的PlatformNotSupportedException问题""

如何循环遍历XML文档 node 以使用XSLT存储值

使用客户端密钥为Fabric Rest API生成令牌

如何修改中间件或其注册以正确使用作用域服务?

不带身份的Blazor服务器.Net 8 Cookie身份验证

Azure Redis缓存与Entra ID身份验证

Blazor服务器端的身份验证角色

从c#列表中删除额外的对象&对象&>从ASP.NET WebForm返回json响应

使用C#HttpClient以多部分形式数据发送带有非ASCII文件名的文件的问题

try 使用C#ASP.NET收集WMI信息时访问被拒绝,但在PowerShell中工作

如何将端点(或с匹配请求并判断其路径)添加到BCL?

Polly重试URL复制值

EF核心新验证属性`DeniedValues`和`StringCompison`不起作用

RX操作员使用先前值进行扫描,信号来自值本身

多个选项卡上的MudForm验证

C#命名管道-编码错误?

毛伊岛.NET 8图片不再适合按钮

DropDownListFor未显示选定值