在 .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 控制器中的控制器名称和方法名称