我正在尝试使用Asp.NET WebAPI模块,但是我得到了一个奇怪的错误。 当我尝试运行这个简单的程序时:
class Program
{
static void Main(string[] args)
{
System.Net.Http.HttpClient client = new HttpClient();
string data = client.GetStringAsync("http://www.kralizek.se/").Result;
Console.WriteLine(data);
Console.ReadLine();
}
}
我有这个错误。
System.MissingMethodException was unhandled
Message=Method not found: 'System.Threading.Tasks.Task`1<System.String> System.Net.Http.HttpClient.GetStringAsync(System.String)'.
Source=Connector.App
StackTrace:
at ConnectorApp.Program.Main(String[] args)
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
错误发生在Visual Studio和LinqPad中,但我的同事没有这样做。
我认为可能与.NET 4.5开发预览存在某种冲突,所以我卸载它但没有任何好处。
由于
答案 0 :(得分:2)
ASP.NET Web API Beta明显与.NET Framework 4.5开发人员预览版不兼容。请参阅http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253802。
我建议卸载两者并在清除两者后重新安装Web API。我不认为在安装Web API之后卸载.NET 4.5 就可以了。
答案 1 :(得分:0)
安装VS2012后,可以使用RTM之前的WebAPI。将以下内容添加到您的app / web.config
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<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>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="1.0.0.0 - 2.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
问题是System.Net.Http的RTM版本会覆盖RTM之前的版本,因为较新的版本在GAC中,而assy发现更喜欢新版本。即使您 explicity 文件引用旧版本(grrr)。
NewtonSoft条目并非绝对必要......
无论如何,这对我们有用。