我正在寻找大约3天,但我找不到解决问题的方法。我们有一个Web应用程序,应该发布到IIS。对于这种情况,我们有一个批处理文件,它运行带有Powershell.exe的ps1文件,该文件运行dotnet publish。
当我运行此发布脚本并运行“ dotnet publish ”时,我得到以下输出:
Publishing WebAuthServer for .NETFramework,Version=v4.6.1/win7-x64
Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Extensions.CommandLineUtils, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. Das System kann die angegebene Datei nicht finden.
at Microsoft.AspNetCore.Server.IISIntegration.Tools.Program.Main(String[] args)
project.json 如下所示:
"dependencies": {
"IdentityServer4": "1.0.0-beta5",
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
"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"
},
"tools": {
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
},
"frameworks": {
"net461": {
"imports": [ "dnx451" ]
}
},
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true,
"languageVersion": "csharp6"
},
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true
}
},
"publishOptions": {
"include": [
"config.json",
"config.default.json",
"config-schema.json",
"web.config",
"WebAuthServerSigning.pfx"
]
},
"scripts": {
"postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
}
当我删除我们的全局nuget包文件夹并使用“ dotnet restore ”恢复nuget包时,它会将IISIntegration-Tools放入.tools文件夹。
当我尝试IIS集成工具的“1.0.0-preview1-final”时,发布没有错误,但结果在浏览器中出现了502错误。
我还尝试删除 project.lock.json 。
我还尝试将 Microsoft.Extensions.CommandLineUtils 放入依赖项部分。
project.lock.json 使用工具部分的以下信息恢复自身:
"tools": {
".NETCoreApp,Version=v1.0": {
"Microsoft.AspNetCore.Server.IISIntegration.Tools/1.0.0-preview2-final": {
"type": "package",
"dependencies": {
"Microsoft.DotNet.ProjectModel": "1.0.0-rc3-003121",
"Microsoft.Extensions.CommandLineUtils": "1.0.0",
"Microsoft.NETCore.App": "1.0.0",
"System.Diagnostics.Process": "4.1.0"
},
"compile": {
"lib/netcoreapp1.0/dotnet-publish-iis.dll": {}
},
"runtime": {
"lib/netcoreapp1.0/dotnet-publish-iis.dll": {}
}
}
}
},
"projectFileToolGroups": {
".NETCoreApp,Version=v1.0": [
"Microsoft.AspNetCore.Server.IISIntegration.Tools >= 1.0.0-preview2-final"
]
}
脚本中用于构建和发布的行是:
. dotnet build $projectPath --configuration Release --no-dependencies
. dotnet publish $projectPath --framework net461 --output $tempPath --configuration Release --no-build
我真的不知道,为什么 CommandLineUtils 似乎在这里丢失。
你知道这里有什么不对吗?
非常感谢你!
修改
我们在git存储库中有一个nuget依赖项的工作副本。但我不知道,为什么大约一年前编译的不同。当我编译项目时,我在nuget文件夹的.tools文件夹中得到一个 Microsoft.AspNetCore.Server.IISIntegration.Tools.deps.json 。当我将旧版本与新版本进行比较时,在工作版本中有时会是运行时部分,而不是新版本。
这里有一个例子。旧的,工作 Microsoft.AspNetCore.Server.IISIntegration.Tools.deps.json 文件:
"Microsoft.AspNetCore.Server.IISIntegration.Tools/1.0.0-preview2-final": {
"dependencies": {
"Microsoft.DotNet.ProjectModel": "1.0.0-rc3-003121",
"Microsoft.Extensions.CommandLineUtils": "1.0.0",
"Microsoft.NETCore.App": "1.0.0",
"System.Diagnostics.Process": "4.1.0"
},
"runtime": {
"lib/netcoreapp1.0/dotnet-publish-iis.dll": {}
}
},
这是没有运行时部分的非工作文件:
"Microsoft.AspNetCore.Server.IISIntegration.Tools/1.0.0-preview2-final": {
"dependencies": {
"Microsoft.DotNet.ProjectModel": "1.0.0-rc3-003121",
"Microsoft.Extensions.CommandLineUtils": "1.0.0",
"Microsoft.NETCore.App": "1.0.0",
"System.Diagnostics.Process": "4.1.0"
}
},
您是否对此信息有任何想法?