为什么OS X上的Xamarin Studio会出现以下错误,而Visual Studio中却没有?

我试图理解为什么在OS X上运行Xamarin Studio 5.9.1(build 3)中的测试时会出现以下错误 .


System.IO.FileNotFoundException:无法加载文件或程序集'System.Net.Http,Version = 1.5.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一 .

System.IO.FileNotFoundException


System.TypeLoadException:发生了类型加载异常 .

System.TypeLoadException


所有项目都成功构建,并且使用相同的解决方案在Windows上的Visual Studio中运行相同的测试 .

我在OS X上构建测试项目时看到了警告,尽管已经安装并添加了引用 .

所有引用MyProject.fsproj的项目都必须安装nuget包Microsoft.Bcl.Build . 有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=317569 .

回答(2)

2 years ago

我仍然不知道为什么Xamarin的行为与Visual Studio不同,但根本原因是测试项目的目标是.Net 4.5而主要项目的目标是.Net 4.0

感谢@ 7sharp9的帮助 .

2 years ago

不同的平台(Android,iOS,桌面)具有不同的System.Net.Http.dll二进制文件 - 从相同的源编译,但每个版本从它构建的平台引用mscorlib.dll(和其他基类库) .

当您在应用程序中使用它时,这不是问题 - Xamarin Studio会自动为您选择正确的版本 - 但您不能在可移植类库中使用它 .

Microsoft最初将HttpClient作为.NET 4.5的一部分实现,但随后发布了它的可移植版本(仅使用Windows的许可证) . 如果我理解正确,那么这与.NET 4.5中的API大致相同,加上一些小的补充(我认为他们添加了gzip压缩,Mono的版本目前没有) .

对于Xamarin / Mono,我们需要做的就是创建这个库的开源版本是为了获取我们现有的源代码并根据可移植的配置文件进行编译 . 我还没有尝试过这个,但这可以像编辑.csproj文件一样简单并替换 .

还建议您安装HttpClient NuGet package System.Net.Http.HttpClient可直接从最新版本的Xamarin获得 .

只需查看Xamarin Studio的更新;-)