9

我刚刚将一个正常工作的 RC2 Web 应用程序转换为 RTM,但在 IIS 上发布时遇到了一些问题。

我找到的所有示例都基于 NetCoreApp1.0 应用程序。由于某些要求,我们仅限于“net46”。

这是project.json

{
  "version": "1.0.0-*",
  "dependencies": {
    "Domain": "1.0.0-*",
    "Microsoft.AspNetCore.Authentication": "1.0.0",
    "Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",
    "Microsoft.AspNetCore.Authentication.Facebook": "1.0.0",
    "Microsoft.AspNetCore.DataProtection.SystemWeb": "1.0.0",
    "Microsoft.AspNetCore.Diagnostics": "1.0.0",
    "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore": "1.0.0",
    "Microsoft.AspNetCore.Http.Extensions": "1.0.0",
    "Microsoft.AspNetCore.Localization": "1.0.0",
    "Microsoft.AspNetCore.Mvc": "1.0.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
    "Microsoft.AspNetCore.StaticFiles": "1.0.0",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
    "Microsoft.Extensions.Configuration.Json": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.Extensions.Logging.Debug": "1.0.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
    "PublicLib": "1.0.0-*",
    "PublicLib.Imaging": "1.0.0-*",
    "PublicLib.Interfaces": "1.0.0-*",
    "Storage": "1.0.0-*"
  },

  "tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": {
      "version": "1.0.0-preview2-final"
    }
  },

  "frameworks": {
    "net46": {

    }
  },

  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },

  "publishOptions": {
    "include": [
      "wwwroot",
      "web.config",
      "Views",
      "appsettings.json",
      "database.json",
      "PublicWeb.nuspec"
    ]
  },

  "packOptions": {

  },

  "scripts": {
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
}

这是我得到的错误

Errors in C:\Development\Path\To\Web\Application\project.json
    Package Microsoft.DotNet.ProjectModel 1.0.0-rc3-003121 is not compatible with netcoreapp1.0 (.NETCoreApp,Version=v1.0). Package Microsoft.DotNet.ProjectModel 1.0.0-rc3-003121 supports:
      - net451 (.NETFramework,Version=v4.5.1)
      - netstandard1.6 (.NETStandard,Version=v1.6)
    One or more packages are incompatible with .NETCoreApp,Version=v1.0.

如果我按如下方式更改“工具”部分,

  "tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": {
      "version": "1.0.0-preview2-final",
      "imports": "net451"
    }
  },

我设法恢复解决方案,但是当我尝试使用 发布解决方案时dotnet publish .\Path\To\Web\Application\ -o .\tmp\public\,我得到以下输出

Publishing PublicWeb for .NETFramework,Version=v4.6/win7-x64
Project Domain (.NETFramework,Version=v4.6) was previously compiled. Skipping compilation.
Project PublicLib.Interfaces (.NETFramework,Version=v4.6) was previously compiled. Skipping compilation.
Project PublicLib (.NETFramework,Version=v4.6) was previously compiled. Skipping compilation.
Project PublicLib.Imaging (.NETFramework,Version=v4.6) was previously compiled. Skipping compilation.
Project Storage (.NETFramework,Version=v4.6) was previously compiled. Skipping compilation.
Project PublicWeb (.NETFramework,Version=v4.6) will be compiled because inputs were modified
Compiling PublicWeb for .NETFramework,Version=v4.6

Compilation succeeded.
    0 Warning(s)
    0 Error(s)

Time elapsed 00:00:01.8045183


Configuring the following project for use with IIS: '.\tmp\public\'
Could not load file or assembly 'Microsoft.DotNet.ProjectModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified.
System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.DotNet.ProjectModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified.
File name: 'Microsoft.DotNet.ProjectModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'
   at Microsoft.AspNetCore.Server.IISIntegration.Tools.PublishIISCommand.Run()
   at Microsoft.AspNetCore.Server.IISIntegration.Tools.Program.<>c__DisplayClass0_0.<Main>b__0()
   at Microsoft.Extensions.CommandLineUtils.CommandLineApplication.Execute(String[] args)
   at Microsoft.AspNetCore.Server.IISIntegration.Tools.Program.Main(String[] args)
publish: Published to .\tmp\public\
Published 1/1 projects successfully

事件如果显示Published 1/1 projects successfully,则.\tmp\public\web.config包含以下行。

<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>

虽然它曾经包含

<aspNetCore processPath=".\PublicWeb.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />

第二个是已部署服务器上 IIS 的工作配置。

关于如何解决这个问题的任何建议?

谢谢

4

5 回答 5

7

这对我有帮助。

在 CMD 中输入 dotnet --version,如果它显示您使用的是版本 preview1,那么您需要执行以下操作才能清理缓存并强制使用 preview2。

首先确保 preview2 在您的计算机中,在 Windows 上,如果目录中有 1.0.0-preview2-003121,它应该在 C:\首先,确保您也安装了最新的 .Net 核心,并从系统中删除 dnx 文件夹,因为它不再相关(更改为 dotnet)。

从 dotnet sdk 目录中删除 preview1 sdk 版本。

在您的项目文件夹中编辑您的 global.json 文件应该是这样的。

{
  "projects": [ "src", "test" ],
  "sdk": {
    "version": "1.0.0-preview2-003121"
  }
}

现在重新启动您的电脑以确保正在重新启动所有服务和进程,运行 dotnet restore 现在它可以工作了,它会首先在缓存上运行一些更新,但不要担心需要一到两分钟取决于您的操作系统规格,然后它将执行还原。

于 2016-07-05T15:34:00.980 回答
3

我遇到了同样的问题,并且能够通过回滚再次IISIntegration.Tools发布1.0.0-preview1-final

"Microsoft.AspNetCore.Server.IISIntegration.Tools": {
  "version": "1.0.0-preview1-final",
  "imports": "portable-net45+win8+dnxcore50"
}
于 2016-06-28T22:43:36.780 回答
1

我可以通过从dot.net网站安装.NET Core SDK来解决此问题,请在此处查看有关此问题的讨论以获取更多详细信息。

于 2016-06-29T09:28:14.400 回答
0

它与我有关的 NuGet。

在我修复它之前,我一直收到错误:

Could not load file or assembly 'Microsoft.DotNet.ProjectModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified.

我发现我的机器上有一个 Visual Studio 版本的 NuGet 和一个命令行版本的 NuGet。我删除了较旧的命令行版本。

我通过进入命令行并运行NuGet显示版本 2.8 找到了命令行版本。运行Visual Studio扩展管理器,报的版本是3.5。

我卸载了命令行 NuGet 版本。

我还清除了 NuGet 缓存:

nuget locals -all clear

我不完全确定它是否有两个不同的版本,或者它是否正在清除缓存,但是在两者都做了之后,我不再收到 ProjectModel 错误。

于 2016-07-13T15:08:18.553 回答
0

从这里下载 NuGet.exe https://dist.nuget.org/index.html

打开命令提示符并转到目录并执行以下命令,例如:C:/Users/Username/Downloads> nuget.exe locals -Clear all

这解决了我的问题 System.IO.FileNotFoundException:无法加载文件或程序集 'Microsoft.DotNet.ProjectModel,Version=1.0.0.0,Culture=neutral,PublicKeyToken=adb9793829ddae60'。该系统找不到指定的文件。

于 2016-09-24T14:00:50.727 回答