VS 2017 .Net Core 2.0 控制台应用程序发布失败
Posted
技术标签:
【中文标题】VS 2017 .Net Core 2.0 控制台应用程序发布失败【英文标题】:VS 2017 .Net Core 2.0 Console Application Publish Fail 【发布时间】:2017-12-26 18:37:09 【问题描述】:我一直在尝试使用 Visual Studio 2017 Community Edition 发布一个 .Net Core 2.0 控制台应用程序,但它总是失败(它在 VS2017 中完美运行)。
这是我的 CSPROJ:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<RuntimeIdentifiers>win10-x64;osx.10.11-x64</RuntimeIdentifiers>
<TargetFramework>netcoreapp2.0</TargetFramework>
<ApplicationIcon />
<StartupObject />
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.0.0" />
</ItemGroup>
<ItemGroup>
<None Update="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<Folder Include="Properties\PublishProfiles\" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\SharedLib\SharedLib.csproj" />
</ItemGroup>
<ProjectExtensions>
<VisualStudio>
<UserProperties appsettings_1json__JSONSchema="http://json.schemastore.org/compilerconfig" />
</VisualStudio>
</ProjectExtensions>
</Project>
这些是我创建的发布配置文件的属性。
点击发布后,这个错误窗口显示给我。
下面是它生成的非常棒且非常有用的“诊断日志”。
System.AggregateException: One or more errors occurred. ---> System.Exception: Publishing failed.
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
at Microsoft.VisualStudio.ApplicationCapabilities.Publish.Model.DefaultPublishSteps.<>c__DisplayClass22_0.<IsBuildCompletedSuccessfully>b__1()
at System.Threading.Tasks.Task`1.InnerInvoke()
at System.Threading.Tasks.Task.Execute()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.VisualStudio.ApplicationCapabilities.Publish.Model.DefaultPublishSteps.<DefaultCorePublishStep>d__19.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.VisualStudio.ApplicationCapabilities.Publish.ViewModel.ProfileSelectorViewModel.<RunPublishTaskAsync>d__108.MoveNext()
---> (Inner Exception #0) System.Exception: Publishing failed.<---
===================
这些是我已经尝试过但没有奏效的东西。
清理并重建项目。 删除 VS2017 缓存和临时文件。 更改发布的目标位置。 将 VS2017 更新到最新版本并重启。有人可以帮我解决这个问题吗?
[更新](解决方法):
我使用 dotnet CLI 完成了发布工作。 打开项目根路径上的cmd(windows power shell也可以)并运行以下命令:
dotnet publish -c Release -r win10-x64
这将在以下路径 bin\Release\netcoreapp2.0\win10-x64\publish 内创建一个发布文件夹,您将在其中找到您的 .exe 文件。
但是通过 Visual Studio 2017 发布时我仍然会遇到错误,最好使用 VS 来完成,因为我不会浪费时间通过命令行进行。
【问题讨论】:
你能包括你的csproj吗?我对这个问题有预感,但我需要查看该文档。 @Greg 我刚刚包含了 csproj。有什么问题吗? 我遇到了一个 msbuild 问题,没有包含 msbuild 属性数据。 自上次更新解决方法以来,您是否找到了更好的解决方案? @Breadtruck,上周我换了笔记本电脑,现在我正在使用 VS2017 专业版。在这些更改之后,我的发布不再失败。我猜那是那个版本的 VS2017 的一个错误。 【参考方案1】:根据this page,对于OSX(现在的MacOS),
.NET Core 2.0 或更高版本,最低版本为
osx.10.12-x64
我怀疑您的项目文件中的以下内容可能造成了一些恶作剧:
<RuntimeIdentifiers>win10-x64;osx.10.11-x64</RuntimeIdentifiers>
据我了解,OSX 版本应该太旧而无法支持(/被支持?).NET Core 2.0。
但我不明白的是,为什么它会在 (a) 从命令行运行时,以及 (b) 在较新/其他版本的 Visual Studio 中工作。
【讨论】:
【参考方案2】:我正在使用 Visual Studio 2017、.Net Core 2.2。在项目发布页面上:
点击配置链接 将 Target Runtime 从 Portable 更改为 win-x64它解决了我的问题。
【讨论】:
以上是关于VS 2017 .Net Core 2.0 控制台应用程序发布失败的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Windows 任务计划程序执行 .Net Core 2.0 控制台应用程序?
与 VS 2017 dotnet-sdk-2.1.4 和 .NET Core 2.0.6 .NET Core SDK 2.1.101 混淆
.net core 2.0学习记录:搭建一个.Net Core网站项目
ASP.NET Core 脚手架在 VS 2017 中不起作用