win10 uwp 如何打包Nuget给其他人

本文详细介绍如何将UWP应用库打包成Nuget包并添加必要的元数据,包括创建空白spec文件、配置元数据、添加不同平台的dll文件等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文告诉大家,如果自己有做一些好用的库,如何使用 Nuget 打包之后上传,分享给大家。

首先需要知道一些 Nuget 打包需要知道的,请看 win10 uwp 上传Nuget 让别人用我们的库

但是 UWP 的包和上面说的有一些不同,需要对打包做一些修改。

可以到 csdn 下载 Nuget 的程序或者到https://www.nuget.org/downloads下载

创建空白的spec

使用 Nuget 命令在空白的文件夹进行创建空白的包,使用命令nuget spec

假如下载的 Nuget 放在 E:\ ,空白文件是 “E:\1” 那么使用的命令就是进入空白文件夹,然后需要写 Nuget 的路径才可以使用。按win+R输入 cmd 打开命令行,然后输入下面代码

E: 进入E盘
cd 1 进入1文件夹
然后把 Nuget 拉进命令行
E:\nuget.exe spec

这时可以看到命令行输出 成功创建

E:\1>E:\nuget.exe spec
已成功创建“Package.nuspec”。

可以看到现在存在 Package.nuspec文件,打开他可以看到下面的东西

<?xml version="1.0"?>
<package >
  <metadata>
    <id>Package</id>
    <version>1.0.0</version>
    <authors>lindexi</authors>
    <owners>lindexi</owners>
    <licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl>
    <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl>
    <iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Package description</description>
    <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
    <copyright>Copyright 2017</copyright>
    <tags>Tag1 Tag2</tags>
    <dependencies>
      <dependency id="SampleDependency" version="1.0" />
    </dependencies>
  </metadata>
</package>

如果你已经看过我上面的博客,那么就知道这些东西是可以如何写,但是 UWP 有一些不同,我现在没有使用上面博客的方法可以成功上传,于是就需要做一些修改。

对空白spec进行修改

首先是版本,现在的版本和id什么都需要自己写,也就是上面的内容都需要自己全部写。如果需要在 description 使用换行,直接回车就好。如果自己的库需要依赖,那么请修改 dependencies ,依赖的版本参见

创建简单的库

上面写的叫 metadata ,写完之后可以创建一个新的 UWP 库,我在这创建一个叫 NrzlmhRzvy 的库

在里面创建一个类

批量创建不同平台 dll 可以给不同的需要

右击解决方法批处理

可以看到有很多的方法,点全选

点击重新生成

可以看到生成了很多文件

打包

接下来就是创建 Nuget ,首先需要把空白的包放到库的文件夹,这里创建的库是E:\1\NrzlmhRzvy\所以把Package.nuspec放在E:\1\NrzlmhRzvy,现在使用 SublimeText打开这个spec,对他做一些修改


<?xml version="1.0"?>
<package >
  <metadata>
    这里不写
  </metadata>
  <files>
     这里写文件
  </files>

</package>

添加文件就是写文件的放在哪,在使用nuget会按照放在的位置,在不同的平台使用库,如果写错了,使用这个库的程序就无法使用,这里需要添加的文件有不同平台的,请看下面的代码

        <file src=".\NrzlmhRzvy\bin\ARM\Debug\NrzlmhRzvy.dll" target="runtimes\win10-arm\lib\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\ARM\Debug\NrzlmhRzvy.pdb" target="runtimes\win10-arm\lib\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\ARM\Debug\NrzlmhRzvy.pri" target="runtimes\win10-arm\lib\uap10.0"/>

        <file src=".\NrzlmhRzvy\bin\x64\Debug\NrzlmhRzvy.dll" target="runtimes\win10-x64\lib\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\x64\Debug\NrzlmhRzvy.pdb" target="runtimes\win10-x64\lib\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\x64\Debug\NrzlmhRzvy.pri" target="runtimes\win10-x64\lib\uap10.0"/>

        <file src=".\NrzlmhRzvy\bin\x86\Debug\NrzlmhRzvy.dll" target="runtimes\win10-x86\lib\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\x86\Debug\NrzlmhRzvy.pdb" target="runtimes\win10-x86\lib\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\x86\Debug\NrzlmhRzvy.pri" target="runtimes\win10-x86\lib\uap10.0"/>

还需要添加入口,现在的代码如果使用,就会出现 提供了编译时引用程序集,但没有与 win10-arm 兼容的运行时程序集 所以需要添加 ref 请看下面

        <file src=".\NrzlmhRzvy\bin\Debug\NrzlmhRzvy.dll" target="ref\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\Debug\NrzlmhRzvy.pdb" target="ref\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\Debug\NrzlmhRzvy.pri" target="ref\uap10.0"/>

于是现在的 spec 就是下面的代码

<?xml version="1.0"?>
<package >
   <metadata>
    <id>Package</id>
    <version>1.0.0</version>
    <authors>lindexi</authors>
    <owners>lindexi</owners>
    <licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl>
    <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl>
    <iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Package description</description>
    <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
    <copyright>Copyright 2017</copyright>
    <tags>Tag1 Tag2</tags>
    <!-- <dependencies>
      <dependency id="SampleDependency" version="1.0" />
    </dependencies> -->
  </metadata>
  <files>
        <file src=".\NrzlmhRzvy\bin\ARM\Debug\NrzlmhRzvy.dll" target="runtimes\win10-arm\lib\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\ARM\Debug\NrzlmhRzvy.pdb" target="runtimes\win10-arm\lib\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\ARM\Debug\NrzlmhRzvy.pri" target="runtimes\win10-arm\lib\uap10.0"/>

        <file src=".\NrzlmhRzvy\bin\x64\Debug\NrzlmhRzvy.dll" target="runtimes\win10-x64\lib\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\x64\Debug\NrzlmhRzvy.pdb" target="runtimes\win10-x64\lib\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\x64\Debug\NrzlmhRzvy.pri" target="runtimes\win10-x64\lib\uap10.0"/>

        <file src=".\NrzlmhRzvy\bin\x86\Debug\NrzlmhRzvy.dll" target="runtimes\win10-x86\lib\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\x86\Debug\NrzlmhRzvy.pdb" target="runtimes\win10-x86\lib\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\x86\Debug\NrzlmhRzvy.pri" target="runtimes\win10-x86\lib\uap10.0"/>

          <file src=".\NrzlmhRzvy\bin\Debug\NrzlmhRzvy.dll" target="ref\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\Debug\NrzlmhRzvy.pdb" target="ref\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\Debug\NrzlmhRzvy.pri" target="ref\uap10.0"/>

     </files>
</package>

然后尝试使用本地的库,新建另一个项目,打开Nuget命令行,输入下面的代码

install-package Package -Source E:\1\NrzlmhRzvy

或者点击选项打开 Nuget 管理,输入本地地址

这样就可以添加打包的库,安装之后需要重新编译才可以使用

如果发现安装还没发现这个程序的类,那么重新编译可能就可以使用。如果发现安装提示不兼容,找不到库,就需要升级库的版本,然后重新生成。

但是这样可以看到,虽然库可以使用,但是没有注释,因为生成没有注释,如果需要注释,那么需要在库右击属性,生成,输出 xml ,实际上输出一份就好了,自己把他复制到各个平台。

或者在生成那里点击输出 xml文档,选择所有的平台,然后修改包的内容,添加输出的xml,这样就可以使用注释

下面就是整个spec的内容

<?xml version="1.0"?>
<package >
   <metadata>
    <id>lindexi</id>
    <version>1.0.2</version>
    <authors>lindexi</authors>
    <owners>lindexi</owners>
    <licenseUrl>http://lindexi.oschina.io</licenseUrl>
    <projectUrl>http://lindexi.oschina.io</projectUrl>
    <iconUrl>http://lindexi.oschina.io</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description> description</description>
    <releaseNotes></releaseNotes>
    <copyright>Copyright 2017</copyright>
    <tags>Tag1 </tags>
  </metadata>
  <files>
          <file src=".\NrzlmhRzvy\bin\ARM\Debug\NrzlmhRzvy.dll" target="runtimes\win10-arm\lib\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\ARM\Debug\NrzlmhRzvy.pdb" target="runtimes\win10-arm\lib\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\ARM\Debug\NrzlmhRzvy.XML" target="runtimes\win10-arm\lib\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\ARM\Debug\NrzlmhRzvy.pri" target="runtimes\win10-arm\lib\uap10.0"/>

        <file src=".\NrzlmhRzvy\bin\x64\Debug\NrzlmhRzvy.dll" target="runtimes\win10-x64\lib\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\x64\Debug\NrzlmhRzvy.pdb" target="runtimes\win10-x64\lib\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\x64\Debug\NrzlmhRzvy.XML" target="runtimes\win10-x64\lib\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\x64\Debug\NrzlmhRzvy.pri" target="runtimes\win10-x64\lib\uap10.0"/>

        <file src=".\NrzlmhRzvy\bin\x86\Debug\NrzlmhRzvy.dll" target="runtimes\win10-x86\lib\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\x86\Debug\NrzlmhRzvy.pdb" target="runtimes\win10-x86\lib\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\x86\Debug\NrzlmhRzvy.XML" target="runtimes\win10-x86\lib\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\x86\Debug\NrzlmhRzvy.pri" target="runtimes\win10-x86\lib\uap10.0"/>

          <file src=".\NrzlmhRzvy\bin\Debug\NrzlmhRzvy.dll" target="ref\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\Debug\NrzlmhRzvy.pdb" target="ref\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\Debug\NrzlmhRzvy.pri" target="ref\uap10.0"/>
        <file src=".\NrzlmhRzvy\bin\Debug\NrzlmhRzvy.XML" target="ref\uap10.0"/>

     </files>
</package>

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

<think>嗯,用户问的是Windows桌面应用推荐用什么语言来编写。首先,我需要考虑不同的应用场景和用户需求。比如,如果是企业级应用可能需要不同的语言,而个人开发者或小团队可能有不同的偏好。 首先,C#和.NET Framework(尤其是WPF或WinForms)应该是首选,因为微软自家的技术对Windows的支持最好,集成度高,开发工具像Visual Studio也很强大。不过,用户可能对跨平台有需求吗?如果用户未来可能需要跨平台,可能需要考虑其他选项,比如Electron或者Qt,但Electron在性能上可能不如原生应用。 然后是C++,虽然难度大,但适合需要高性能的应用,比如游戏或图形处理软件。如果用户的项目对性能要求极高,C++配合Win32 API或MFC可能更合适,不过MFC现在可能不太流行了,可以考虑现代C++框架。 Python也是一个可能的选择,特别是快速开发或原型设计,用Tkinter、PyQt或PySide。但Python打包成exe可能会比较麻烦,而且性能可能不够好,适合小工具而不是大型应用。 跨平台方面,Electron使用JavaScript,适合Web开发者,但资源消耗大。Java的Swing或JavaFX,不过Java在桌面应用上不如以前流行了,但如果有Java背景的话可能还是选项。另外,像Rust这样的新兴语言,比如使用GTK或Iced框架,可能适合追求高性能和内存安全的开发者,但生态还在发展中。 还需要考虑用户的技术背景。如果是新手,C#可能更容易上手,因为有大量的教程和社区支持。如果是Web开发者,可能更倾向于Electron。性能方面,C++或Rust更好,但学习曲线陡峭。 另外,现代框架如UWP或MAUI,虽然UWP可能限制较多,MAUI支持跨平台,但可能还不够成熟?需要确认最新的情况。还有像Flutter这样的框架,现在也开始支持Windows桌面应用,可能也是一个选项,特别是如果用户已经熟悉Flutter移动开发的话。 总结下来,需要分情况讨论:原生开发、跨平台、性能需求、开发效率、技术背景等。然后给出每个情况下的推荐语言和框架,以及优缺点,帮助用户根据自己的需求做选择。</think>在Windows桌面应用开发中,编程语言的选择需综合考虑开发效率、性能需求、跨平台兼容性及技术生态。以下是分步分析及推荐方案: --- ### **一、原生Windows应用开发** #### 1. **C# + .NET框架** - **适用场景**:企业级应用、数据驱动型软件、快速开发 - **推荐框架**: - **WPF** (Windows Presentation Foundation):支持现代化UI设计,数据绑定机制完善 - **WinForms**:适合传统桌面应用,开发速度快 - **优势**: - 微软官方支持,与Windows深度集成 - Visual Studio提供强大的调试和GUI设计工具 - 丰富的NuGet包生态 - **示例代码**: ```csharp // WPF窗口示例 public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); MessageBox.Show("Hello Windows!"); } } ``` #### 2. **C++** - **适用场景**:高性能应用(如游戏引擎、音视频处理) - **推荐框架**: - **Win32 API**:底层控制,适合需要直接操作系统的场景 - **Qt**:跨平台框架,提供现代化UI组件(需商业授权) - **优势**: - 极致性能,直接调用系统API - 内存管理灵活 - **缺点**: - 学习曲线陡峭,开发周期长 --- ### **二、跨平台开发方案** #### 1. **Electron (JavaScript/TypeScript)** - **适用场景**:Web技术移植、中小型工具类应用 - **优势**: - 使用HTML/CSS/JS快速构建界面 - 跨平台兼容性优秀 - **缺点**: - 内存占用高,性能低于原生应用 - 典型应用:Visual Studio Code、Slack #### 2. **Python** - **推荐框架**: - **PyQt/PySide**:Qt的Python绑定,功能强大 - **Tkinter**:内置轻量级框架 - **适用场景**:原型设计、小型工具 - **优势**: - 开发速度快,语法简洁 - 丰富的科学计算库支持 - **缺点**: - 执行效率较低,打包体积大 --- ### **三、新兴技术选择** #### 1. **Rust + WinRT** - **优势**: - 内存安全与高性能并存 - 支持现代Windows API调用 - **典型框架**:`iced`、`gtk-rs` #### 2. **Flutter (Dart)** - **现状**:官方已支持Windows桌面开发 - **优势**: - 一套代码适配多平台(移动端+桌面) - 热重载提升开发效率 - **缺点**: - 生态成熟度低于传统方案 --- ### **四、决策建议** 1. **优先选择原生技术**:若追求最佳性能和系统集成,推荐**C# + WPF**或**C++ + Qt** 2. **侧重开发效率**:选择**C# WinForms**或**Python PyQt** 3. **需跨平台**:考虑**Electron**或**Flutter** 4. **高性能需求**:采用**C++**或**Rust** --- ### **五、学习资源推荐** 1. **C#**:[微软官方WPF教程](https://docs.microsoft.com/zh-cn/dotnet/desktop/wpf/) 2. **Qt**:[Qt官方文档](https://doc.qt.io/) 3. **Electron**:[Electron快速入门指南](https://www.electronjs.org/docs) 可根据项目规模、团队技术栈和长期维护需求综合选择。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值