【问题标题】:ASP.Net 5 IIS: Failed to resolve the following dependenciesASP.Net 5 IIS:无法解析以下依赖项
【发布时间】:2015-09-04 11:39:28
【问题描述】:

我有一个使用多个非 DNX 类库的 ASP.Net 5 MVC 6 项目。这些库是通过 dnu wrap 包装的,所有作品都可以在 IIS Express 或自托管应用程序上找到。但是在 IIS 8 上显示错误

无法解析目标框架的以下依赖项 'DNX,版本 = v4.5.1': 我的项目列表

当前运行时目标框架:'DNX,Version=v4.5.1 (dnx451)' 版本:1.0.0-beta7-15532 类型:CLR 架构:x64 操作系统名称:Windows 操作系统版本:6.3.9600.0

如果我使用 dnx 4.6 也会出现同样的错误(我只是降级以查看它是否适用于 4.5.1)。

但是可以在以下位置找到这些库:approot\packages\ 具有正确的 nuget 包结构(dnu 发布打包它们)

那么如何帮助 IIS 找到我的库?

重现步骤:

  1. 使用 2 个项目创建解决方案:新的 ASP.Net MVC 应用程序和常用类库(非包)

  2. 通过 dnu wrap 包装类库

  3. 从 MVC 中引用类库

  4. 发布 Web 应用程序(如果从 Visual Studio 发布不起作用,请使用 dnu publish --runtime active)

  5. 在 IIS 中创建网站并将其指向已发布 Web 应用的 wwwroot 文件夹

更新: 原来问题不在于 IIS 本身,而在于 DNX。如果我发布网站然后通过 Microsoft.AspNet.Server.WebListener 运行它,我会得到同样的错误。看起来 dnu publish 无法与打包的项目一起正常工作。

但是,在运行 Windows 服务时情况并非如此。我有一个引用相同库的控制台应用程序(包),我使用 --no-source 发布它,然后通过 sc.exe 将其安装为 Windows 服务,一切都按预期工作。

【问题讨论】:

  • 您是否有用于程序集DNX 4.5.1 版的DLL 副本?
  • 什么意思?我为 DNX 4.5.1 构建了所有 DLL,并且可以为任何 DNX 版本构建。它不是 3rd 方 DLL,它只是类库项目

标签: asp.net asp.net-mvc iis asp.net-core


【解决方案1】:

我的问题是在 project.json 中我有没有库版本的引用,只是一个空字符串。它在 Visual Studio 下工作,但在没有 VS 的情况下运行。 我有这样的引用,因为在 RC 中我无法添加引用 vie 上下文菜单,所以我手动添加它并且它有效。 下面是如何设置网站以在 IIS 下运行的步骤:

1) 使用“dnu wrap”命令包装非 DNX 项目

2) 将 DNX 项目的引用添加到您的非 DNX 项目,并检查您在 project.json 中的版本是否正确(应该与 wrap\yourproject\project.json 中的版本相同)。这是一个例子:

"frameworks": {
    "dnx46": {
        "dependencies": {
            "MyLib": "1.0.0-*"                
        }
}

3) 使用 dnu publish 发布您的网站

dnu publish .\src\Web --out <outputfolder>

4) 使用运行时参数再次发布。这次运行时被复制到输出文件夹。但是这次没有创建 wwwroot 文件夹,很好,我们已经在步骤 3 中运行了发布;-)。您可以更改第 3 步和第 4 步的顺序

dnu publish .\src\Web --out &lt;outputfolder&gt; --runtime dnx-clr-win-x64.1.0.0-beta7

5) 转到outputfolder\wwwroot\web.config 并在 appsettings 中键入 2 个参数的值:dnx-version 和 dnx-clr。这是一个例子:

<appSettings>
  <add key="bootstrapper-version" value="1.0.0-beta7" />
  <add key="runtime-path" value="..\approot\runtimes" />
  <add key="dnx-version" value="1.0.0-beta7" />
  <add key="dnx-clr" value="clr" />
  <add key="dnx-app-base" value="..\approot\src\Web" />
</appSettings>

6) 在 IIS 中创建新网站,选择运行时 .Net v4.0 的应用程序池

7) 将您的新网站指向 outputfolder\wwwroot 文件夹

8) 检查一切是否正常

【讨论】:

  • 对于 beta8 及更高版本的用户,这些说明可能没有那么有用。 beta8 使用依赖于“无托管代码”的 HttpPlatformHandler 本机 IIS 模块的不同部署模型。 dnu publish 应该采用 --runtime dnx-clr-win64.1.0.0-beta8 但 web.config 不需要本文中提到的任何键。
猜你喜欢
  • 2022-06-21
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 2016-06-17
  • 2021-11-07
  • 2020-05-27
  • 1970-01-01
相关资源
最近更新 更多