所以我有一些用户收到此错误
System.MissingMethodException: Method not found: 'Void System.Net.Http.Headers.HttpHeaders.AddWithoutValidation(System.String, System.Collections.Generic.IEnumerable`1<System.String>)'.
at System.Net.Http.HttpHeaderExtensions.CopyTo(HttpContentHeaders fromHeaders, HttpContentHeaders toHeaders)
at System.Net.Http.ObjectContent..ctor(Type type, HttpContent content)
at System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent content)
at Octgn.Site.Api.ApiClient.Login(String username, String password)
我无法在本地重现此问题,但某些使用我的 WPF 应用程序的人最终会遇到此错误。经过一些挖掘日志后,我看到了这个
LOADED ASSEMBLY: System.Net.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Net.Http\v4.0_2.0.0.0__b03f5f7f11d50a3a\System.Net.Http.dll
我试过在 csproj 中改变这个
<Reference Include="System.Net.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.Net.Http.2.0.20710.0\lib\net40\System.Net.Http.dll</HintPath>
</Reference>
对此
<Reference Include="System.Net.Http">
<HintPath>..\..\packages\Microsoft.Net.Http.2.0.20710.0\lib\net40\System.Net.Http.dll</HintPath>
</Reference>
我也尝试将其添加到 app.config 文件中
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="1.0.0.0 - 4.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>
这些东西似乎都不想加载与我的项目的 exe 位于同一目录中的 dll。我在本地有 dll,但似乎无法避免 GAC。这是一个产品,所以每天都有数百人使用,所以我希望找到一些不需要用户最终在他们的机器上手动做某事的解决方案。
我也考虑过在加载代码Assembly.Load
或类似的代码中抢先加载 dll,但我不确定这是否会产生影响,我认为会有一个更优雅的解决方案。
好的,那么如果我使用ilmerge
http://www.microsoft.com/en-us/download/details.aspx?id=17630将所有这些新程序集合并到一个新程序集中呢?或者 GAC 是否使用命名空间等?好吧,我正在尝试...当我让有问题的人对其进行测试时,我会报告它是否有效。
有任何想法吗?