已找到应用程序依赖项清单 (Test.deps.json) 中指定的程序集,但文件扩展名不同:

问题描述

我正在尝试向 IIS 发布新的 .net API。因为这需要在生产服务器上完成,所以我正在尝试使用示例 API 项目和测试服务器来确定如何首先进行此操作。

我使用 this 作为参考。

项目使用.net 5.0 我安装了 windows .net core 托管包 v5.0.6 我安装了 windows .net core runtime v5.0.6

我按照所有必要的步骤在 IIS 中创建了一个应用程序池和网站。

示例项目只是您可以获得的最基本的 .net 核心 Web API 项目,只需单击 Web API 并没有进行任何更改,这只有 1 个端点和一个 swagger 页面

当我将其发布到测试服务器并尝试在浏览器中查看 swagger 页面时,我收到了 404。 如果我使用 dotnet "Projectname".exe 运行项目 exe,我会收到以下错误消息

D:\ThirdPartyAPI>dotnet Test.exe
Error:
  An assembly specified in the application dependencies manifest (Test.deps.json) has already been found but with a different file extension:
    package: 'Test',version: '1.0.0'
    path: 'Test.dll'
    prevIoUsly found assembly: 'D:\ThirdPartyAPI\Test.exe'

我尝试编辑Test.deps.json,但不知道要删除什么,每次编辑时程序集都无效。

我尝试将项目/运行时和应用程序池切换到 32 位,但发生了同样的事情。

如果我在包管理器控制台中键入 dotnet publish,然后通过转到已发布的文件夹并使用命令 dotnet run Test.exe

在本地运行 api,则会发生同样的事情

我尝试了在其他 SO 帖子中可以找到的所有可能的解决方案,但没有任何改变。 我将 <PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest> 添加到我的 csproj,但同样没有任何反应。

我尝试从库密钥中删除我的 Test.deps.json 中的重复项,其他一些 SO 帖子建议这样做,但这使程序集无效。

我现在没有任何想法,我想完成它,以便我可以继续前进。

如果需要,我会提供任何其他信息,提前谢谢您!

编辑: 我在 .net core 3.1 中使用示例 API 尝试了相同的过程,这是第一次尝试... 或许可以将真正的 API 移植回 3.1,但这绝对不是首选。

解决方法

您应该运行 dotnet Test.dll 或仅运行 Test.exe,因为两者都是执行 .NET Core 应用程序所支持的方式。

dotnet Test.exe 不起作用,因为 dotnet CLI 期望提供托管程序集,而 Test.exe 是所谓的“默认可执行文件”(实际上是本机 Windows 二进制文件)没有任何托管元数据)。