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 RuntimePortable 更改为 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 中不起作用

ASP.NET Core 2.0 为同一端点结合了 Cookie 和承载授权

在 VS2010 中将 FSharpx(来自 NuGet)与 F# 2.0 一起使用