Visual studio C# 单元测试 System.Net.Http.Formatting 未加载程序集

Visual studio C# unit test System.Net.Http.Formatting assembly not loaded

我正在尝试为我的 Web API 项目编写测试。但在我的 Web API 控制器上执行任何操作时,请将 运行 保持为运行时异常。

我的测试项目构建良好。但是当运行时,Visual studio会抱怨System.Net.HTTP.Formatting.dll无法加载。 我检查了我的主项目和我的测试项目之间的版本,所有 DLL 版本都是相同的。

全部错误:

Message: Test method Tests.TagsTests.HappyFlowTests threw exception: System.IO.FileLoadException: Kan bestand of assembly System.Net.Http.Formatting, Version=5.2.6.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 of een van de afhankelijkheden hiervan niet laden. De manifestdefinitie van de gevonden assembly komt niet overeen met de assembly-verwijzing. (Uitzondering van HRESULT: 0x80131040) ---> System.IO.FileLoadException: Kan bestand of assembly System.Net.Http.Formatting, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 of een van de afhankelijkheden hiervan niet laden. De manifestdefinitie van de gevonden assembly komt niet overeen met de assembly-verwijzing. (Uitzondering van HRESULT: 0x80131040)

翻译得不好

Message: Test method Tests.TagsTests.HappyFlowTests threw exception: System.IO.FileLoadException: Can't load file or assembly System.Net.Http.Formatting, Version=5.2.6.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 or one of it's dependencies. The found manifest doesn't match the referenced assembly. (exception HRESULT: 0x80131040) ---> System.IO.FileLoadException: Can't load file or assembly System.Net.Http.Formatting, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 or one of it's dependencies.The found manifest doesn't match the referenced assembly. (exception HRESULT: 0x80131040)

我尝试过以多种不同的方式清理和重建解决方案。但是似乎有什么地方不对劲,它总是与 DLL 有问题。

My tests packages.config
    <?xml version="1.0" encoding="utf-8"?>
    <packages>
      <package id="EntityFramework" version="6.2.0" targetFramework="net461" />
      <package id="Microsoft.AspNet.WebApi" version="5.2.4" targetFramework="net461" />
      <package id="Microsoft.AspNet.WebApi.Client" version="5.2.4" targetFramework="net461" />
      <package id="Microsoft.AspNet.WebApi.Core" version="5.2.4" targetFramework="net461" />
      <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.4" targetFramework="net461" />
      <package id="MSTest.TestAdapter" version="1.3.2" targetFramework="net461" />
      <package id="MSTest.TestFramework" version="1.3.2" targetFramework="net461" />
      <package id="Newtonsoft.Json" version="6.0.4" targetFramework="net461" />
    </packages>

我的主要项目packages.config

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Antlr" version="3.5.0.2" targetFramework="net461" />
  <package id="bootstrap" version="3.3.7" targetFramework="net461" />
  <package id="EntityFramework" version="6.2.0" targetFramework="net461" />
  <package id="jQuery" version="3.3.1" targetFramework="net461" />
  <package id="Microsoft.ApplicationInsights" version="2.5.1" targetFramework="net461" />
  <package id="Microsoft.ApplicationInsights.Agent.Intercept" version="2.4.0" targetFramework="net461" />
  <package id="Microsoft.ApplicationInsights.DependencyCollector" version="2.5.1" targetFramework="net461" />
  <package id="Microsoft.ApplicationInsights.PerfCounterCollector" version="2.5.1" targetFramework="net461" />
  <package id="Microsoft.ApplicationInsights.Web" version="2.5.1" targetFramework="net461" />
  <package id="Microsoft.ApplicationInsights.WindowsServer" version="2.5.1" targetFramework="net461" />
  <package id="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel" version="2.5.1" targetFramework="net461" />
  <package id="Microsoft.AspNet.Mvc" version="5.2.4" targetFramework="net461" />
  <package id="Microsoft.AspNet.Razor" version="3.2.4" targetFramework="net461" />
  <package id="Microsoft.AspNet.TelemetryCorrelation" version="1.0.0" targetFramework="net461" />
  <package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net461" />
  <package id="Microsoft.AspNet.WebApi" version="5.2.4" targetFramework="net461" />
  <package id="Microsoft.AspNet.WebApi.Client" version="5.2.4" targetFramework="net461" />
  <package id="Microsoft.AspNet.WebApi.Core" version="5.2.4" targetFramework="net461" />
  <package id="Microsoft.AspNet.WebApi.HelpPage" version="5.2.4" targetFramework="net461" />
  <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.4" targetFramework="net461" />
  <package id="Microsoft.AspNet.WebPages" version="3.2.4" targetFramework="net461" />
  <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="2.0.0" targetFramework="net461" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net461" />
  <package id="Modernizr" version="2.8.3" targetFramework="net461" />
  <package id="Newtonsoft.Json" version="11.0.1" targetFramework="net461" />
  <package id="System.Diagnostics.DiagnosticSource" version="4.4.1" targetFramework="net461" />
  <package id="WebGrease" version="1.6.0" targetFramework="net461" />
</packages>

我今天遇到了这个奇怪的错误。如果我使用 HttpClient 扩展方法,我会出于某种原因发现。在我的例子中 httpClient.PostAsJsonAsync。一旦我用更冗长的方法替换了我的扩展方法。

httpClient.PostAsync("/path/", new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json").

问题消失了,尽管扩展方法似乎与 'StringContent' 在同一个命名空间/程序集下。

稍后我可能会尝试重现此问题,并可能将其作为潜在的 SDK 错误提出,但至少对我自己而言,我有一个解决方法。