Unity 使用NuGet获取所需dll —— 示例:安卓 + NPOI插件

这篇具有很好参考价值的文章主要介绍了Unity 使用NuGet获取所需dll —— 示例:安卓 + NPOI插件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 

目录

前言

一、开发环境介绍

1. Unity版本

2. 发布平台

3. 本次目标

二、围绕NPOI的失败历程(纯吐槽,可跳过)

三、记录正确步骤

1. 准备环境

        ①.创建/打开c#类库

        ②. VS打开NuGet包管理器

2. 整理包以及依赖

        ①. Nuget搜索插件

        ②. 查看依赖项

        ③. 整理依赖项

3. 下载并导入Unity

        ①. 下载所有包

        ②. 提取包

        ③. 导入Unity

 四、总结

五、问题汇总

六、下载链接


前言

        以前总遇到一个问题:明明找到了开源库但用起来很麻烦。网上找别人编好的dll不仅要花费大量时间,还不一定能用,即便能用换个环境就有不行了(Unity经常需要多平台发布)。自己编译的话呢又够呛,创空白工程自己从头写代码倒是能编译成功,但是将现有工程生成DLL总是失败。。。

        这次误打误撞终于走通了,Nuget这个宝藏终于能扛回家了!!有种村里终于通上高速路的感觉……

一、开发环境介绍

1. Unity版本

        当前使用的unity版本是2022.1.8f1

        推测:能使用.Net4.x或者.NetStandard2.0及以上的高版本都行

        至于只能使用.net2.0的低版本可能够呛,Nuget里好像都是.net4起步的

2. 发布平台

        当前平台是安卓,选的是.NetStandard2.1

        其他平台看Unity发布设置Configuration -> Api Compatibility Level

        Nuget里依赖项的确定与Unity设置一致(后面有截图,nuget里都列出来了)

3. 本次目标

        功能:手机使用NPOI插件动态生成word(功能不重要,主要是提取dll)

        核心:其实就是如何获取所需的dll。咳咳,要能用的哦!!

二、围绕NPOI的失败历程(纯吐槽,可跳过)

a. GitHub找到了NPOI插件,发现源码没有dll,缺少.NETFramework7.2,无法打开,放弃。

b. 第一次寻找到别人编好的DLL,导入直接报错。

c. 从Nuget提取编译好的NPOI,但是导入报错,缺少ICSharpCode.SharpZipLib。这个库网上也找了找但导入后版本不对,Github上找到了原始工程但也是要编译,心想着NPOI这一个都没搞定还来第二个,果断放弃。

d. 第N次找到别人编号的DLL,能用!!!

    ① 编译器能用,发布没报错,真开心,看来这功能很快就能开发完了;

    ② 出现问题:编译器生成word能正常打开且格式正确,但是发布apk后全是乱码。。。心里的第一反应就是坑爹的WPS误我,下载手机Office  (电脑是office2019,手机是wps,有这反应挺正常的吧,不是鄙视)。。。。然而我太天真了,没意识到问题的严重性。。。当编译器生成的word能在手机打开,手机生成的word电脑上打不开时,醒悟不是office和wps的问题,虽然感觉有点不对但也没当回事,以为手机可能要单独设置些什么。。。当字体、编码、样式等都改了一遍但问题依旧,又当代码只生成一行英文打开依然乱码时,发现真坑爹。。。接下来是Unity引擎设置、项目设置都检查一遍,问题依旧。。。没办法,换方法:新建个模板,用代码打开进行关键字替换,这样就不需要担心格式问题了。。。当我发现关键字替换预期与实际不符时真的懵了:替换成功了,但又没成功。成功是因为关键字确实被替换了,失败是别替换的字不对:代码是用“B”替换“ACCC”中的“A”,输出结果应该是“BCCC”,实际是输出“DCCC”。。。。加完断点一测发现插件函数功能不对:tempText = tempText.Replace("A", “B”);。。。。震惊:函数功能居然能和函数名串台!震惊:Unity居然没报错!!震惊:披着函数的皮做着自己的事!!!

    ③ 猜测:沉默了半天,感觉应该是dll版本与Unity不一致,dll编译的是.NETFramework,unity安卓用的是.NETStandard2.1。

e. Unity可以将.NETStandard2.1换成.NETFramework,好像需要改什么。我没这么干,因为这会影响其他所有模块。

f. 找不到现成的.NETStandard2.1,尝试自己编译。

    ① .NETFramework7.2~8 都安了一遍,反正早晚要用到~

    ② 工程能打开,但是不会编译。。。按照记忆以及网上的教程都失败了

    ③ 突然想到如果将步骤c中缺少的库也从Nuget提取出来,会不会成功。结果不出意外的失败:

严重性 代码 说明 项目 文件 行 禁止显示状态 错误 无法安装程序包“SharpZipLib 1.4.2”。你正在尝试将此程序包安装到目标为“native,Version=v0.0”的项目中,但该程序包不包含任何与该框架兼容的程序集引用或内容文件。有关详细信息,请联系程序包作者。此问题的解决方案见下方问题汇总

    ④ unity论坛、百度、谷歌搜遍了,依然是编译失败、Nuget提取失败。

    ⑤ 突然醒悟:我居然拿c++来编译c#。。。(其实之前怀疑过,但没找到c#模板以为通用)

    ⑥ 安装完c#开发环境,找到c#模板,终于成功使用Nuget提取出类库。。。但用起来还是报错

    ⑦ 痛苦中沉沦了半天后,静下心来,打开Nuget认真研究了一遍(之前都是对照教程无脑听指挥),突然灵光一闪:我就对照依赖表,他要什么我就从nuget里提取什么,依赖项全部提取出来不就行了嘛。(感觉有戏)

    ⑧ 全部提取出来了13个类库(我是建了一个Excel的,当时越整理越没底死马当活马医了)。

    ⑨ 逐个导入unity,发现能用了。以为这我就会高兴?我有那么天真??没经过实战检测的成功也能算成功???果然,发布Apk失败:

ArgumentException: The Assembly System.Security.Cryptography.Xml is referenced by NPOI.OOXML ('Assets/Office/Plugins/NPOI.OOXML.dll'). But the dll is not allowed to be included or could not be found.此问题的解决方案见下方问题汇总

    ⑩ System.Security.Cryptography.Xml这玩意依赖表里没有啊,难道NPOI的XML文件的问题?把所有DLL的XML删除,果然问题依旧,毕竟XML只是注释。

    ⑪ 怀疑是.NETStandard2.1不兼容.NETStandard2.0,因为NPOI和SharpZipLib我用的是2.1,其他用的2.0,发现问题不但没解决,还出现新的错误,果断换回来了。

    ⑫ 多种尝试无果后,又突发奇想,却这玩意我就去nuget提取呗,管他依赖表里有没有,万一是作者写漏了呢?然后就是。。。   !!!   ~\(≧▽≦)/~

三、记录正确步骤

1. 准备环境

目的:此步骤为了用VS提取Nuget里的包

前置:

        a. 我用的是VS2019,其他版本应该没啥,与Unity匹配就行。

        b. VS装有c#的开发环境,见下图:

nuget 获取dll,Unity,unity,android

步骤:

        ①.创建/打开c#类库

                创建c#类库,准备提取包 (自己已有工程也能用,这只是个工具人工具类)

nuget 获取dll,Unity,unity,android

注意:创建VS工程时,选C#模板,别想我之前一样没找到c#模板拿DLL或者c++的来凑合。

        ②. VS打开NuGet包管理器

nuget 获取dll,Unity,unity,android

2. 整理包以及依赖

目的:找到需要下载的所有包,准备下载

注意:只整理先不下载,防止下错版本或者版本混乱了

步骤:

        ①. Nuget搜索插件

                图片说明:左上角浏览 -> 搜索包名 -> 选择包 -> 中间查看版本和依赖项 -> 右侧是已下载的包(先忽略)

                找不到窗口,直接重置布局:工具栏"窗口" -> 重置窗口布局

nuget 获取dll,Unity,unity,android

        ②. 查看依赖项

                图中我用的是.NetStandard2.1,根据自己情况选择。(上方“2. 发布平台”章节有提到)

                不同版本依赖项也不同(高版本依赖比较多,可适当降版本)

nuget 获取dll,Unity,unity,android

        ③. 整理依赖项

                下图是我用EXCEL整理的NPOI所有依赖包,部分版本忘标注了,VS截图里有。

                跟据我观察4.5.0版本比较合适,具体以实际为准O(∩_∩)O

nuget 获取dll,Unity,unity,android

注:这步先确定所有依赖项都能从Nuget找到且依赖包版本全部符合。

                (虽然缺失的概率小,但是万一呢。。。)

3. 下载并导入Unity

        ①. 下载所有包

                小技巧:在上面整理的Excel中从后往前下载。VS右上角有已安装包的版本介绍,有依赖的包可以对照已安装检查核对一下再下载。​

nuget 获取dll,Unity,unity,android

 

        ②. 提取包

                VS已安装包中,右键->在文件资源管理器中打开文件夹

nuget 获取dll,Unity,unity,android

                dll就在lib文件夹下面,选择需要的版本就行。

          nuget 获取dll,Unity,unity,androidnuget 获取dll,Unity,unity,android

        ③. 导入Unity

                拖拽到Unity的Plugins文件夹下就行。建议下载完一起导入。

                多平台需要创建子平台文件夹,例如 Plugins -> Android -> xxx.dll

nuget 获取dll,Unity,unity,android

 四、总结

        1. 此方法虽然可行,但是因为导入了一大堆依赖项会使工程变大。我这工程发布的APK比之前大了3M……好吧,我能接受~~

        2. 比较繁琐,一大堆依赖项逐个比对版本。。。

        3. NuGet好像没有.Net2.0的包,所以此方法不适合旧版的unity

        4. NuGet有.Net4.x和.NetStandard2.0以及更高版本的库,高版本unity应该能用

        5. 之前有人说NuGet能用,有人说不能用。原因是有些库没有依赖项,比如Newtonsoft.Json

        6. 其实很简单的,只是这条路之前没走过有点彷徨。

五、问题汇总

问题一:NuGet安装包失败

        错误:严重性 代码 说明 项目 文件 行 禁止显示状态 错误 无法安装程序包“SharpZipLib 1.4.2”。你正在尝试将此程序包安装到目标为“native,Version=v0.0”的项目中,但该程序包不包含任何与该框架兼容的程序集引用或内容文件。有关详细信息,请联系程序包作者。

        原因:项目是c++,安装程序包是c#,不是同一种开发语言

        解决:用安装程序包的语言创建项目,这里是用c#创建工程。

问题二:发布APK失败

        错误:ArgumentException: The Assembly System.Security.Cryptography.Xml is referenced by NPOI.OOXML ('Assets/Office/Plugins/NPOI.OOXML.dll'). But the dll is not allowed to be included or could not be found.

        原因:缺少依赖,可能整理依赖表的人写漏了

        解决:去Nuget里寻找这个依赖包 (记得递归这个包的依赖,O(∩_∩)O:依赖的依赖也是我的依赖)

问题三:依赖项搞错或者版本不符

        错误:切换插件.NetStandard版本后出错,比如我之前测试从2.1降到2.0后出现新的错误。

        原因:不同版本依赖项不同

        解决:去Nuget核对更换后版本的依赖项,逐个添加。

六、下载链接

NPOI插件在NetStandard2_1版本的库.zip
提取码:CLPS文章来源地址https://www.toymoban.com/news/detail-705574.html

到了这里,关于Unity 使用NuGet获取所需dll —— 示例:安卓 + NPOI插件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp - [安卓|苹果]实现App端引入高德地图,详细获取当前用户手机定位、两个地点的路线规划及相关示例代码,uniapp安卓Android平台软件下使用高德地图,获取当前位置信息及规划路线

    在uniapp安卓app端 | 苹果app端开发中,详细完成APP端引入使用高德地图插件,提供可直接复制的示例,例如获取当前定位及取到当前城市位置信息,规划两个位置的路线(规划城市2个点的路线轨迹及在地图上显示)等示例。 新手跟着教程一步步来,轻松实现此功能。 首先,

    2024年02月22日
    浏览(108)
  • Unity使用NPOI库操作Word文件

    1、导入NPOI库的DLL 链接:https://pan.baidu.com/s/1O29nSZdBsNM8hP_f6-bH1A?pwd=6666 提取码:6666 –来自百度网盘超级会员V4的分享 2、将类库文件导入到Plugins文件夹目录下,类库文件要放在Plugins文件夹里面才能在C#引用 3、设置.NET版本,如果不是4.x可能会出现不兼容的问题,这个不一定,看

    2024年03月27日
    浏览(32)
  • 在Unity中使用EPPlus库NPOI库写入Excel数据

    Unity版本: 2021.3.25f1 1.EPPlus库: a.引用EPPlus库:首先,需要在Unity项目中引用EPPlus库。可以通过从官方网站(https://epplussoftware.com/)下载EPPlus库的最新版本,并将其添加到Unity项目中。 b.创建Excel数据:在Unity中,使用C#脚本来创建Excel数据。在示例代码中,创建了一个名为MemorySt

    2024年01月19日
    浏览(62)
  • Unity 使用NPOI,模板替换Excel中的关键字(针对.xlsx)

    Unity 使用NPOI,模板替换Excel中的(针对.xlsx) 需求:项目中要用到生成Excel来打印文件,只需要替换其中的值,保留原模板,生成新的Excel 第一步:在unity中导入一下的dll 新建一个Plugin的文件夹,把dll全部放进去 以上选中的这些文件在unity的安装目录下 UnityEditorData

    2023年04月24日
    浏览(49)
  • Unity 安卓(Android)端AVProVideo插件播放不了视频,屏幕一闪一闪的

    编辑器运行没有问题,但是安卓就有问题,在平板上运行就会报错: vulkan graphics API is notsupported 说不支持Vulkan图形API,解决方法:把Vulkan删除掉

    2024年02月09日
    浏览(36)
  • Unity Dotween插件的运动曲线(Ease)介绍Ease选项Ease效果示例以及C#修改动画曲线功能

    我们在制作动画时经常使用这个Dotween插件,在移动、旋转、透明度等等参数的控制都可以使用该插件,而且在这个插件上的控制动画可以设置曲线,内置的曲线有这些: 以InOutSine的曲线进行往右移动: 效果是这样的: 能看出开始是从0提速,最后是慢慢减速至0的效果。 4个

    2024年02月01日
    浏览(82)
  • 极简式 Unity 获取 bilibili 直播弹幕、SC、上舰、礼物等 插件

    极简式 Unity 获取 bilibili 直播弹幕、SC、上舰、礼物等 1. 声明 下载链接 软件均仅用于学习交流,请勿用于任何商业用途! 2. 介绍 该项目为Unity实时爬取B站直播弹幕。 项目介绍:通过传入B站直播间账号,实现监控B站直播弹幕、SC、上舰、礼物等。 运行方式:下载后将文件夹

    2024年02月05日
    浏览(36)
  • 在 Unity 解决方案中引用外部工程(.csproj)或 NuGet 包

    本人近期制作一服务端和客户端程序,采用下列架构实现: 服务端(Server.exe) 中间件(Shared.dll,实现两端共享的那部分代码) 客户端(Client.exe,用 Unity 实现) 在不使用 Unity 的情况下,一般把三个工程(.csproj)放入同一解决方案(.sln),然后在服务端和客户端添加对中

    2024年02月02日
    浏览(34)
  • 搜索引擎爬虫技巧:快速获取所需信息!

    现代社会,信息爆炸式增长,各行各业都需要大量的数据支持。而搜索引擎则成为了人们获取信息的主要途径。但是,人工搜索对于海量数据的处理速度和效率都无法满足需求。这时候,基于搜索引擎爬取资源就成为了一种重要的方式。本文将从多个方面详细介绍如何利用爬

    2024年02月05日
    浏览(45)
  • UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

    完全没接触过C++的插件和DLL,因为MediaPipe需要自己创建插件并编译DLL库,所以把该踩的坑都踩了一遍,几天终于把DLL加载给弄明白了.创作不易,还请点个赞! 参考资料: 封装自己的项目为dll给其他用户使用_哔哩哔哩_bilibili 【UE5】UE项目中静态库还没整明白吧,动态链接库又来了_哔

    2023年04月21日
    浏览(77)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包