在 .NET Core 控制台应用程序中获取对 System.Printing 命名空间的访问权限

Posted

技术标签:

【中文标题】在 .NET Core 控制台应用程序中获取对 System.Printing 命名空间的访问权限【英文标题】:Getting the access to the System.Printing namespace in .NET Core Console Application 【发布时间】:2020-06-09 09:25:23 【问题描述】:

有没有办法从 .net 核心控制台应用程序访问 System.Printing 命名空间。我看到它可用于 .net 核心 WPF 应用程序。文档中没有任何内容指定它仅适用于 WPF。

我一直在寻找 System.Printing NuGet 包,但没有成功

我在 Windows 10 上使用 C# .NET Core 3.1

【问题讨论】:

有点。如果您将项目文件设置为使用 WPF(<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"><UseWpf>true</UseWpf>)但将<OutputType> 保留在Exe,您将拥有一个带有Main 的控制台应用程序,它可以做任何它喜欢的事情——在特别是,它实际上不需要提供任何 WPF GUI。我说“有点”是因为此应用程序当然仍会绑定到 Windows,可能不支持此设置,并且如果您需要引入其他非 WPF 代码,它可能会以意想不到的方式失败。警告讲师。 它有着曲折的历史。最初在 .NET 2.0 中完成,但他们决定不包含它,因为它不够好。但是 WPF 依赖于它,所以他们别无选择,只能在 3.0 中发布它。所以你确实需要创建一个 WPF 项目来获取它,你不必创建任何 UI。小心麻烦,它真的不足以管理打印队列。 取决于你需要什么,并假设一个 windows 目标.. 你也可以 PInvoke 到终点线。网上有不错的用于 win32 打印的 PInvoke 包装器。请注意.. 如果这是一条简单的路线,那么它已经完成并且是核心框架的一部分。 【参考方案1】:

将以下框架引用添加到您的 .csproj 文件,以便能够引用 System.Printing 命名空间:

<ItemGroup>
    <FrameworkReference Include="Microsoft.WindowsDesktop.App.WPF" />
</ItemGroup>

来源:https://github.com/dotnet/wpf/issues/871#issuecomment-501498045 https://docs.microsoft.com/en-us/dotnet/core/porting/cpp-cli

示例:

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

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <FrameworkReference Include="Microsoft.WindowsDesktop.App.WPF" />
  </ItemGroup>

</Project>

【讨论】:

以上是关于在 .NET Core 控制台应用程序中获取对 System.Printing 命名空间的访问权限的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 .NET Core 的控制台应用程序中从 appsettings.json 获取值?

如何在 Web API .NET Core 的控制器之外获取当前用户

获取 ASP.NET-Core 2.2 控制器中的控制器名称和方法名称

.Net Core MVC 路由:有条件地为每个控制器设置 MapSpaFallbackRoute

获取模型/对象以在 .Net Core 的局部视图中使用

在 ASP.NET Core 控制器中模拟 HttpRequest