部署时,Web API项目将无法运行 - 无法加载文件或程序集'Newtonsoft.Json,Version = 4.5.0.0

 江南西道longge 发布于 2023-02-12 16:45

我在部署MVC 5 WEB API项目时遇到此错误:

无法加载文件或程序集"Newtonsoft.Json,Version = 4.5.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed"或其中一个依赖项.该系统找不到指定的文件.

我已经按照这个并重新安装NuGet包"Update-Package Newtonsoft.Json -Reinstall",但它没有用.

有谁在这里有任何想法可能会出错?

2 个回答
  • 检查对Newtonsoft.json DLL的引用,并确保它没有自动选择解决方案中packages文件夹之外的版本.

    我的VS 2013一直在各种/program files (x86)/...文件夹中找到其他副本.它甚至忽略了将包版本DLL显式添加到项目中.不得不深入挖掘,找出为什么会发生这种情况......

    调查

    .csproj在文本编辑模式下打开了项目文件,并搜索了对Newtonsoft.Json的所有引用.

    事实证明我没有一个,但两个引用我的csproj文件中的DLL(我不知道这是可能的).一个引用较旧的Newtonsoft.json 5.0.6(当前为5.0.8).

    我没有手动删除其中一个,而是将这个缺少的元素添加到第二个DLL包含中.我还将版本号更改为5.0.8:

      <Private>True</Private>
    

    所以它现在看起来像:

    <Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
      <HintPath>..\..\CsQueryTest\packages\Newtonsoft.Json.5.0.8\lib\net45\Newtonsoft.Json.dll</HintPath>
      <Private>True</Private>
    </Reference>
    

    Private是为DLL引用定义"复制本地"的设置.然后它再次开始将DLL包含在输出中!

    我将弄清楚要从csproj文件中删除哪个,但是现在如果遇到这个问题,这可能会让你开始.看起来原因可能是过去的NUGET更新.

    2023-02-12 16:48 回答
  • 您是否尝试在Web配置中放置程序集重定向以确保您的应用程序正在查找正确的版本:

        <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"  culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
      </dependentAssembly>
    

    2023-02-12 16:49 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有