したがって、このエラーが発生するユーザーがいます
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を回避するためにそれを取得できないようです。これは製品であるため、1 日に何百人もの人々に配布されます。そのため、ユーザーが最後に自分のマシンで手動で何かを行う必要のない解決策を見つけたいと考えています。
また、ロード時にコード内のdllをプリエンプティブにロードすることについても考えましたAssembly.Load
が、それが違いを生むかどうかはわかりません。よりエレガントなソリューションがあると思います。
ilmerge
では、 http://www.microsoft.com/en-us/download/details.aspx ? id= 17630 を使用して、これらの新しいアセンブリをすべて新しいアセンブリにマージするとどうなるでしょうか。または、GAC は名前空間などを使用しますか? まあ、私はそれを試しています...問題を抱えている人にテストしてもらったら、うまくいったかどうかを報告します.
何か案は?