发布的ASP.NET核心网站上的错误:找不到包'Microsoft.AspNet.WebApi.Client'的编译库位置

时间:2018-08-26 04:51:32

标签: c# asp.net-core asp.net-core-2.1

从Visual Studio运行时,我的webb应用程序工作正常,但是当我发布并尝试加载页面时,我得到:

  

InvalidOperationException:找不到包'Microsoft.AspNet.WebApi.Client'的编译库位置   Microsoft.Extensions.DependencyModel.CompilationLibrary.ResolveReferencePaths(ICompilationAssemblyResolver解析器,列表程序集)

我已经坚持了很长时间。我试图在线程https://github.com/dotnet/core-setup/issues/2981中应用各种变通办法,但没有一个起作用。

我的csproj文件粘贴在下面。我不确定还有哪些其他信息会有用:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <UserSecretsId>aspnet-CrowdQuery2-8C668DB3-5C80-4D9E-851D-2434D0CDA7E9</UserSecretsId>
    <PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
  </PropertyGroup>

  <PropertyGroup>
    <RuntimeFrameworkVersion>2.1.2</RuntimeFrameworkVersion>    
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNet.WebApi.Client" Version="5.2.6" />
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.1.3" PrivateAssets="All" />
  </ItemGroup>

  <ItemGroup>
    <Folder Include="ViewModels\" />
  </ItemGroup>

</Project>

3 个答案:

答案 0 :(得分:4)

我在使用Microsoft Azure时遇到了同样的问题。

在这种情况下,解决方案是使用Kudu(开发工具->高级选项)清理Web应用程序中的wwwroot文件夹,因为仍然有一些旧的DLL升级到.NET Core 2.1之前,因为.NET Core 1将DLL发布到wwwroot文件夹中,而在2.1中,DLL是从全局存储中加载的。

完全清空wwwroot文件夹并重新部署应用程序后,该错误已解决,该应用程序按预期运行。

答案 1 :(得分:1)

我必须

(1)

编辑.csproj并添加

<PropertyGroup>
  <MvcRazorExcludeRefAssembliesFromPublish>False</MvcRazorExcludeRefAssembliesFromPublish>
</PropertyGroup>

(2)

将发布的“目标运行时”更改为“ win-x64”(以前是x86)。我不知道为什么需要这样做,因为我的项目属性->平台目标是“任何CPU”。

(在同一解决方案中,我还有两个其他类似的网站,这些.csproj文件都不要求该行,而且都仍在发布到x86上。)

答案 2 :(得分:0)

如果您是在重新发布Web应用程序时托管了ASP.NET的先前版本,则仍然会有dll文件引用先前发布的.NET版本。

因此,您必须手动清除wwwroot文件夹。将包发布到Azure Web应用程序时,这里就是所有文件的托管位置。您可以通过Azure Web App设置中的“高级工具”选项访问wwwroot文件夹。

enter image description here

您基本上会在Web应用程序中获得一个网址,中间是scm。

  • 转到调试控制台> Powershell
  • 在文件夹结构中,先访问网站,然后访问wwwroot
  • 清除wwwroot中的所有文件

一旦部署了Web应用程序,它将被发布而没有任何错误