我已经验证了将HttpResponseMessage
作为返回类型的文件设置为“编译”,就像他们在这里说的那样:Why I cannot use HttpResponseMessage class?
我已经从packages.config迁移到packagereference(nuget),并拥有一个包含webapi的.net 4.7.2 mvc项目。它曾经工作过,但是在更新了Nuget之后再也没有了。我在使用system.web.http和框架中的4.0.0版本以及较新的4.x nuget时遇到了问题。
我的问题似乎与https://github.com/Microsoft/dotnet/issues/737有关,但我不确定。
我也尝试过这个https://stackoverflow.com/a/50095678/169714
这就是我的web.config的一部分:
<system.web>
<globalization fileEncoding="utf-8" culture="auto" uiCulture="auto" enableClientBasedCulture="true"/>
<compilation debug="true" targetFramework="4.7.2">
<assemblies>
<add assembly="System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</assemblies>
</compilation>
<httpRuntime targetFramework="4.7.2"/>
切换回4.7.1可以使intellisense提供建议添加using System.Net.Http;
而不是using System.Web.Http;
,并且似乎可以解决此问题。但是为什么呢?
因此,我现在可以发布“答案”:恢复为4.7.1。所以问题是:为什么能解决这个问题?
修改
我已从package.config手动移至packagereference并发现了这一点:Visual Studio 2017 - Could not load file or assembly 'System.Runtime, Version=4.1.0.0' or one of its dependencies
据说应该有一个迁移选项。但是我没有看到它,并删除了.config文件。我已经重新安装了大多数nuget软件包,但是即使安装了4.3.0 nuget,我也仍然停留在System.Runtime, Version=4.2.1.0
上。通常,VS在调试信息中为我提供了一个选项,可以双击并重定向web.config中的程序集绑定。但是它不存在,所以也许是手动添加?
我也尝试添加
<ItemGroup>
<PackageReference Include="Legacy2CPSWorkaround" Version="1.0.0">
<PrivateAssets>All</PrivateAssets>
</PackageReference>
</ItemGroup>
所有其他nuget的packagereferences。但这也无济于事。我还尝试添加NetStandard.Library nuget,但这也无济于事...
添加
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.3.0" />
</dependentAssembly>
这也没有帮助。之前的web.config中没有system.runtime。它仍在尝试寻找System.Runtime, Version=4.2.1.0
。
答案 0 :(得分:4)
.NET 4.7.2上不需要软件包或bindingRedirects。只需引用System.Net.Http并“使用System.Net.Http”就可以使HttpResponseMessage可用。
此问题与以下问题有关:https://github.com/dotnet/sdk/issues/2221
请安装Visual Studio 2017更新15.8。它将确保项目文件和依赖项适用于您的方案。
请参阅:https://blogs.msdn.microsoft.com/visualstudio/2018/08/14/visual-studio-2017-version-15-8/
答案 1 :(得分:0)
如果您有能力安装所需的软件包,我一直都会这样做。通过Visual Studio在NuGet命令提示符中使用“ Install-Package System.Runtime -Version 4.2.1”通常可以解决问题并消除错误,否则,您将必须重定向到4.3.0。重新尝试做。希望这会有所帮助!