文件未找到异常:无法加载文件或程序集'System.Net.Http.WebRequest'。

8
我已经下载了最新的.NET Framework,并在VS 2017 15.8.7上工作于.NET Core 2.0 应用程序。以下是我所安装的软件包。
请注意,此处为HTML标签,请勿删除或修改。

enter image description here

using (var client = new PowerBIClient(new Uri(ApiUrl), tokenCredentials))
      {

      }

我在这行代码中遇到了错误,提示如下:
FileNotFoundException: Could not load file or assembly 'System.Net.Http.WebRequest, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified.

以下是我的 .csproj 文件

 <PackageReference Include="Microsoft.AspNetCore.App" />
 <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.1.2" PrivateAssets="All" />
 <PackageReference Include="Microsoft.PowerBI.Api" Version="2.0.14" />
 <PackageReference Include="Microsoft.PowerBI.Core" Version="1.1.11" />
 <PackageReference Include="Microsoft.AspNet.WebApi.Client" Version="5.2.6" />
 <PackageReference Include="System.Net.Http" Version="4.3.4" />

为什么会出现这个错误?是否有任何参考资料可以添加以使其正常工作?

[更新] 我在我的csproj中添加了以下行,现在不再出现此错误。

<ItemGroup>
    <Reference Include="System.Net.Http">
      <HintPath>..\..\..\..\..\..\Windows\Microsoft.NET\Framework\v4.0.30319\System.Net.Http.dll</HintPath>
    </Reference>
    <Reference Include="System.Net.Http.WebRequest">
      <HintPath>..\..\..\..\..\..\Windows\Microsoft.NET\Framework\v4.0.30319\System.Net.Http.WebRequest.dll</HintPath>
    </Reference>
  </ItemGroup>

你的应用程序是否实际针对.NET Framework? - Chris Pratt
<PropertyGroup> <TargetFramework>netcoreapp2.1</TargetFramework> </PropertyGroup> - MAK
@MAK,我现在遇到这个问题,你找到解决办法了吗?Dotnet core和.NET Framework不同,对我来说现在还不清楚PowerBI API客户端是否与dotnet core兼容——它可以构建,但是在运行时出现了这个错误。然而,我将我的应用程序移植到.NET Framework 4.6.1上,仍然在运行时收到此错误,所以可能是其他原因。 - Ross Brasseaux
我收回之前的说法。将应用程序移植到.NET Framework确实解决了这个问题。我打开了两个VS实例,因为某种原因其中一个调试器是从另一个项目中托管的...这本身也是一个非常奇怪的问题,但在这里并不相关。 - Ross Brasseaux
我认为只需要更新第一个参数以将其解析为URL,必须包含引用磁盘的规范地址。 - Society Guru
显示剩余2条评论
3个回答

5

问题出在这里。你的目标是.NET Core。你使用的代码在底层使用了WebRequest,但在.NET Core中不存在。你需要将目标框架更改为完整的框架:

<TargetFramework>net461</TargetFramework>

或者您希望针对的其他版本。这意味着您只能在Windows服务器上运行此应用程序。


如果我将目标框架更改为net461,我会遇到错误:包Microsoft.AspNetCore.App 2.1.0与net461不兼容。我的应用程序是一个.net core 2.0应用程序。 - MAK
1
然后尝试将版本提升到更新的版本。老实说,我不确定任何版本的.NET Framework是否兼容ASP.NET Core 2.1。如果不行,您可能需要降级到2.0。 - Chris Pratt
@ChrisPratt 我给你发放奖励是因为从技术上讲,你是正确的,这仍然是问题的最佳答案和解决方案。然而,你关于 .NET Framework 的评论暗示了一些对 .NET Framework、.NET Core 和 .NET Standard 之间关系的误解。请注意,.NET Core 是一次重写,而不是 .NET Framework 的某个“核心”部分。你很可能已经知道这一点(你的账户足以证明这一点),但你在这里使用的语言有些令人困惑,可能会误导其他开发者。 - Ross Brasseaux
@ChrisPratt 或许我有点迂腐,但是“你需要针对完整的框架”这个短语对我来说意味着.NET Framework是.NET Core的一个更强大的版本/实现。这就是我一开始忽略了你的答案并设置赏金来引诱更可靠的来源的原因。 - Ross Brasseaux
@ChrisPratt 说得好,克里斯。感谢你的解释。 - Ross Brasseaux
显示剩余2条评论

2

我知道两种情况会导致出现这个错误:

  • nuget包未在解决方案的"客户端项目"中安装(仅将依赖项添加到解决方案的常见/因素化项目中是不够的;有时您需要将依赖项添加到使用它的项目本身)
  • 您定义的框架版本与解决方案中的所有项目或已安装的nuget包都不兼容;您可以考虑对所有nuget包进行大规模升级,并检查每个项目中定义的框架版本

谢谢您。我们遇到了这个问题,您的第一个建议——将NuGet包添加到主客户端项目中——解决了我们的问题。 - TheEmirOfGroofunkistan

0
有时候,在NuGet上安装缺失包的最高版本(System.Net.Http)可能会有所帮助。ASP.NET使用的版本可能与PowerBI不同,因此可能需要进行绑定重定向。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接