我正在使用Microsoft.AspNet.WebApi.Client(版本5.2.4)。 在我的项目(版本11.0.2)中引用了Newtonsoft.Json。
我正在尝试获取网络服务调用的结果,如下所示:
...
using (var client = new HttpClient())
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var content = new StringContent($"grant_type=refresh_token&client_id=sfd34tgregge&client_secret=345534535&refresh_token={refreshToken}", Encoding.UTF8, "application/x-www-form-urlencoded");
var response = await client.PostAsync(url, content);
if (response.IsSuccessStatusCode)
{
var getAccessTokenResult = await response.Content.ReadAsAsync<GetAccessTokenResult>();
...
}
}
...
当我从C#应用程序引用此DLL时,我可以毫无问题地执行此代码。
当我通过COM调用相同的方法时,我收到以下错误:
Exception: Could not load file or assembly 'Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The system could not find the specified file.
我们通过以下方式修改了可通过COM访问的类:
[ProgId("MyDll")]
[ClassInterface(ClassInterfaceType.AutoDual)]
public class MyDll : IMyDll
{
...
}
我们还在AssemblyInfo.cs中设置了以下内容:
[assembly: ComVisible(true)]
app.config包含以下内容:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/></startup></configuration>
为什么会收到此错误消息?为什么这会尝试使用Newtonsoft.Json的6.0.0.0版本?为什么在从.NET应用程序调用它时这是有效的,而在通过COM调用时却没有? 我还能检查什么?
答案 0 :(得分:0)
引用它的应用程序是否具有相同版本的Newtonsoft.json
AND 相同/兼容版本的.NET
?
值得检查您的packages.config文件和您的包文件夹。