已发布的 ASP.NET 核心站点出错:找不到程序包 'Microsoft.AspNet.WebApi.Client' 的编译库位置
Error on published ASP.NET core site: Cannot find compilation library location for package 'Microsoft.AspNet.WebApi.Client'
我的 Webb 应用程序在 Visual Studio 运行 时工作正常,但是当我发布并尝试加载页面时,我得到:
InvalidOperationException: Cannot find compilation library location for package 'Microsoft.AspNet.WebApi.Client'
Microsoft.Extensions.DependencyModel.CompilationLibrary.ResolveReferencePaths(ICompilationAssemblyResolver resolver, List assemblies)
我已经坚持了很长一段时间。我已尝试在线程 https://github.com/dotnet/core-setup/issues/2981 中应用各种解决方法,但其中 none 已经奏效。
下面粘贴了我的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>
我在使用 Microsoft Azure 时遇到了同样的问题。
这种情况下的解决方案是使用 Kudu(开发工具 -> 高级选项)清理 Web 应用程序中的 wwwroot
文件夹,因为有一些旧的 DLL 在升级到 .NET Core 2.1 之前仍然存在,因为 .NET Core 1 将 DLL 发布到 wwwroot
文件夹,而在 2.1 中,DLL 是从全局存储中加载的。
完全清空 wwwroot
文件夹并重新部署应用程序后,错误得到解决,应用程序 运行 符合预期。
我不得不
(1)
编辑 .csproj 并添加
<PropertyGroup>
<MvcRazorExcludeRefAssembliesFromPublish>False</MvcRazorExcludeRefAssembliesFromPublish>
</PropertyGroup>
(2)
将发布的“目标运行时”更改为“win-x64”(以前是 x86)。我不知道为什么需要这样做,因为我的项目属性 -> 平台目标是“Any CPU”。
(我在同一个解决方案中还有另外两个类似的网站,这些 .csproj 文件都不需要该行,并且都仍在发布到 x86)。
我的 Webb 应用程序在 Visual Studio 运行 时工作正常,但是当我发布并尝试加载页面时,我得到:
InvalidOperationException: Cannot find compilation library location for package 'Microsoft.AspNet.WebApi.Client' Microsoft.Extensions.DependencyModel.CompilationLibrary.ResolveReferencePaths(ICompilationAssemblyResolver resolver, List assemblies)
我已经坚持了很长一段时间。我已尝试在线程 https://github.com/dotnet/core-setup/issues/2981 中应用各种解决方法,但其中 none 已经奏效。
下面粘贴了我的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>
我在使用 Microsoft Azure 时遇到了同样的问题。
这种情况下的解决方案是使用 Kudu(开发工具 -> 高级选项)清理 Web 应用程序中的 wwwroot
文件夹,因为有一些旧的 DLL 在升级到 .NET Core 2.1 之前仍然存在,因为 .NET Core 1 将 DLL 发布到 wwwroot
文件夹,而在 2.1 中,DLL 是从全局存储中加载的。
完全清空 wwwroot
文件夹并重新部署应用程序后,错误得到解决,应用程序 运行 符合预期。
我不得不
(1)
编辑 .csproj 并添加
<PropertyGroup>
<MvcRazorExcludeRefAssembliesFromPublish>False</MvcRazorExcludeRefAssembliesFromPublish>
</PropertyGroup>
(2)
将发布的“目标运行时”更改为“win-x64”(以前是 x86)。我不知道为什么需要这样做,因为我的项目属性 -> 平台目标是“Any CPU”。
(我在同一个解决方案中还有另外两个类似的网站,这些 .csproj 文件都不需要该行,并且都仍在发布到 x86)。