NuGet的学习小记

欢欢欢欢 发表于 2018-8-22 15:49

这两天由于公司需求,需要升级APP支持语音,语音推送需要极光的最新架包,老办法解决不了新问题了。

最新架包需要使用NuGet;

NuGet页:摸这里

程序包管理器指令:PM> Install-Package Jiguang.JPush -Version 1.2.2

升级好之后发现,编译失败。

原来在安装极光推送包的时候,NeGet自动将Newtonsoft.Json升级到了9.0.1版本;而最早在新建项目时(我的项目是.Net Framework4.5)系统在Global.asax自动生成了代码:

WebApiConfig.Register(GlobalConfiguration.Configuration);

这其中的WebApi都依赖于Newtonsoft.Json 4.5.11版本,这样就导致Newtonsoft.Json版本冲突。好在项目中并没有使用WebApi的功能,所以将这两行代码注释掉就编译通过了。然而事情并没有看上去那么顺利。

解决方案中好几个项目都使用了Newtonsoft.Json。这些项目中的Newtonsoft.Json版本各自都不同(团队成员开发过程中各自引用导致的混乱),其中一个公用的底层使用的还是4.5.11版本,好吧,升级它到指定的版本,和极光的版本保持一致。

程序包管理器指令:PM> Install-Package Newtonsoft.Json -version 9.0.1  (安装指定版本的Package)

程序包管理器指令:PM> Update-Package Newtonsoft.Json -version 9.0.1  (更新到指定版本的Package)

Ok,到此为止,整个项目编译通过并且也能正常跑通了。

但是在发布的时候出现了一些小小的异常,逼死了我这个强迫症。

就是在发布的时候总是多出了两行额外的警告信息:

--------------------------------------------------------------------------------

请考虑使用 app.config 将程序集“Newtonsoft.Json, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”从版本“6.0.0.0”[]重新映射到版本“9.0.0.0”[E:\mld\huilinsofts\移动端\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll],以解决冲突并消除警告。
 
C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1635,5): 警告 MSB3247: 发现同一依赖程序集的不同版本间存在冲突。在 Visual Studio 中,请双击此警告(或选择此警告并按 Enter)以修复冲突;否则,请将以下绑定重定向添加到应用程序配置文件中的“runtime”节点: <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"><dependentAssembly><assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" /><bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" /></dependentAssembly></assemblyBinding>
----------------------------------------------------------------------------------------
解决方案就在第二行加粗的部分。按照指示在config文件中配置好之后,终于可以很顺心的发布了。
 

另外,还百度了一些其他的方法,就是重装Newtonsoft.Json:

程序包管理器指令:PM> Update-Package –reinstall Newtonsoft.Json

然而,重装好了之后,各个项目都还是原来的版本,并没什么用。

后记:

有时候不注意很容易将安装包安装到不需要的项目上,这时候可以卸载。

正常卸载:Uninstall-Package <程序包名>;如 Uninstall-Package Jiguang.JPush -Version 1.2.2

强制卸载:Uninstall-Package <程序包名> -Force