从 VS 2017 发布 .net 核心应用程序

Publish .net core app from VS 2017

我正在 Visual Studio 2017 Community Edition 下创建一个新的解决方案,它主要是一个 .net 核心 Web 应用程序。

它运行完美,一点问题都没有,但我们想将它部署到 Debian 机器上并自包含,所以我们将运行时标识符添加到项目中。到目前为止一切顺利,当我们想为我们拥有的任何平台发布应用程序(到目录)时,问题就来了,没有指定目标平台的选项,创建的发布文件只是.net程序集,没有本机模块。

当然,如果我们使用 dotnet publish -r (platform) 它会按预期工作,它会创建正确的平台文件并且一切似乎都正常,但是必须转到命令行来编译它非常烦人。

所以问题是,如何使用 Visual Studio 2017 为具体平台发布独立的应用程序?甚至可能还是仍然缺少?

您可以更新项目文件 csproj 以添加 runtimeIdentifier:

<RuntimeIdentifier>win7-x86</RuntimeIdentifier>

用你想要的运行时间替换 win7-x86。

尽管在发布屏幕上显示运行时:可移植,但它似乎确实生成了一个独立版本。

资源管理器中的结果:

vs2017执行的命令

 C:\Program Files (x86)\Microsoft Visual Studio17\Community\MSBuild.0\Bin\Roslyn\csc.exe /noconfig /unsafe- /checked- /nowarn:1701,1702,1705,2008 /nostdlib+ /platform:x86 /errorreport:prompt /warn:4 /define:TRACE;RELEASE;NETCOREAPP1_1 /errorendlocation /preferreduilang:en-US /reference:C:\Users\Joel\.nuget\packages\microsoft.csharp.3.0\ref\netstandard1.0\Microsoft.CSharp.dll /reference:C:\Users\Joel\.nuget\packages\microsoft.visualbasic.1.0\ref\netstandard1.1\Microsoft.VisualBasic.dll /reference:C:\Users\Joel\.nuget\packages\microsoft.win32.primitives.3.0\ref\netstandard1.3\Microsoft.Win32.Primitives.dll /reference:C:\Users\Joel\.nuget\packages\system.appcontext.3.0\ref\netstandard1.6\System.AppContext.dll /reference:C:\Users\Joel\.nuget\packages\system.buffers.3.0\lib\netstandard1.1\System.Buffers.dll /reference:C:\Users\Joel\.nuget\packages\system.collections.concurrent.3.0\ref\netstandard1.3\System.Collections.Concurrent.dll /reference:C:\Users\Joel\.nuget\packages\system.collections.3.0\ref\netstandard1.3\System.Collections.dll /reference:C:\Users\Joel\.nuget\packages\system.collections.immutable.3.0\lib\netstandard1.0\System.Collections.Immutable.dll /reference:C:\Users\Joel\.nuget\packages\system.componentmodel.annotations.3.0\ref\netstandard1.4\System.ComponentModel.Annotations.dll /reference:C:\Users\Joel\.nuget\packages\system.componentmodel.3.0\ref\netstandard1.0\System.ComponentModel.dll /reference:C:\Users\Joel\.nuget\packages\system.console.3.0\ref\netstandard1.3\System.Console.dll /reference:C:\Users\Joel\.nuget\packages\system.diagnostics.debug.3.0\ref\netstandard1.3\System.Diagnostics.Debug.dll /reference:C:\Users\Joel\.nuget\packages\system.diagnostics.diagnosticsource.3.0\lib\netstandard1.3\System.Diagnostics.DiagnosticSource.dll /reference:C:\Users\Joel\.nuget\packages\system.diagnostics.process.3.0\ref\netstandard1.4\System.Diagnostics.Process.dll /reference:C:\Users\Joel\.nuget\packages\system.diagnostics.tools.3.0\ref\netstandard1.0\System.Diagnostics.Tools.dll /reference:C:\Users\Joel\.nuget\packages\system.diagnostics.tracing.3.0\ref\netstandard1.5\System.Diagnostics.Tracing.dll /reference:C:\Users\Joel\.nuget\packages\system.dynamic.runtime.3.0\ref\netstandard1.3\System.Dynamic.Runtime.dll /reference:C:\Users\Joel\.nuget\packages\system.globalization.calendars.3.0\ref\netstandard1.3\System.Globalization.Calendars.dll /reference:C:\Users\Joel\.nuget\packages\system.globalization.3.0\ref\netstandard1.3\System.Globalization.dll /reference:C:\Users\Joel\.nuget\packages\system.globalization.extensions.3.0\ref\netstandard1.3\System.Globalization.Extensions.dll /reference:C:\Users\Joel\.nuget\packages\system.io.compression.3.0\ref\netstandard1.3\System.IO.Compression.dll /reference:C:\Users\Joel\.nuget\packages\system.io.compression.zipfile.3.0\ref\netstandard1.3\System.IO.Compression.ZipFile.dll /reference:C:\Users\Joel\.nuget\packages\system.io.3.0\ref\netstandard1.5\System.IO.dll /reference:C:\Users\Joel\.nuget\packages\system.io.filesystem.3.0\ref\netstandard1.3\System.IO.FileSystem.dll /reference:C:\Users\Joel\.nuget\packages\system.io.filesystem.primitives.3.0\ref\netstandard1.3\System.IO.FileSystem.Primitives.dll /reference:C:\Users\Joel\.nuget\packages\system.io.filesystem.watcher.3.0\ref\netstandard1.3\System.IO.FileSystem.Watcher.dll /reference:C:\Users\Joel\.nuget\packages\system.io.memorymappedfiles.3.0\ref\netstandard1.3\System.IO.MemoryMappedFiles.dll /reference:C:\Users\Joel\.nuget\packages\system.io.unmanagedmemorystream.3.0\ref\netstandard1.3\System.IO.UnmanagedMemoryStream.dll /reference:C:\Users\Joel\.nuget\packages\system.linq.3.0\ref\netstandard1.6\System.Linq.dll /reference:C:\Users\Joel\.nuget\packages\system.linq.expressions.3.0\ref\netstandard1.6\System.Linq.Expressions.dll /reference:C:\Users\Joel\.nuget\packages\system.linq.parallel.3.0\ref\netstandard1.1\System.Linq.Parallel.dll /reference:C:\Users\Joel\.nuget\packages\system.linq.queryable.3.0\ref\netstandard1.0\System.Linq.Queryable.dll /reference:C:\Users\Joel\.nuget\packages\system.net.http.3.0\ref\netstandard1.3\System.Net.Http.dll /reference:C:\Users\Joel\.nuget\packages\system.net.nameresolution.3.0\ref\netstandard1.3\System.Net.NameResolution.dll /reference:C:\Users\Joel\.nuget\packages\system.net.primitives.3.0\ref\netstandard1.3\System.Net.Primitives.dll /reference:C:\Users\Joel\.nuget\packages\system.net.requests.3.0\ref\netstandard1.3\System.Net.Requests.dll /reference:C:\Users\Joel\.nuget\packages\system.net.security.3.0\ref\netstandard1.3\System.Net.Security.dll /reference:C:\Users\Joel\.nuget\packages\system.net.sockets.3.0\ref\netstandard1.3\System.Net.Sockets.dll /reference:C:\Users\Joel\.nuget\packages\system.net.webheadercollection.3.0\ref\netstandard1.3\System.Net.WebHeaderCollection.dll /reference:C:\Users\Joel\.nuget\packages\system.numerics.vectors.3.0\ref\netstandard1.0\System.Numerics.Vectors.dll /reference:C:\Users\Joel\.nuget\packages\system.objectmodel.3.0\ref\netstandard1.3\System.ObjectModel.dll /reference:C:\Users\Joel\.nuget\packages\system.reflection.dispatchproxy.3.0\ref\netstandard1.3\System.Reflection.DispatchProxy.dll /reference:C:\Users\Joel\.nuget\packages\system.reflection.3.0\ref\netstandard1.5\System.Reflection.dll /reference:C:\Users\Joel\.nuget\packages\system.reflection.extensions.3.0\ref\netstandard1.0\System.Reflection.Extensions.dll /reference:C:\Users\Joel\.nuget\packages\system.reflection.metadata.4.1\lib\netstandard1.1\System.Reflection.Metadata.dll /reference:C:\Users\Joel\.nuget\packages\system.reflection.primitives.3.0\ref\netstandard1.0\System.Reflection.Primitives.dll /reference:C:\Users\Joel\.nuget\packages\system.reflection.typeextensions.3.0\ref\netstandard1.5\System.Reflection.TypeExtensions.dll /reference:C:\Users\Joel\.nuget\packages\system.resources.reader.3.0\lib\netstandard1.0\System.Resources.Reader.dll /reference:C:\Users\Joel\.nuget\packages\system.resources.resourcemanager.3.0\ref\netstandard1.0\System.Resources.ResourceManager.dll /reference:C:\Users\Joel\.nuget\packages\system.runtime.3.0\ref\netstandard1.5\System.Runtime.dll /reference:C:\Users\Joel\.nuget\packages\system.runtime.extensions.3.0\ref\netstandard1.5\System.Runtime.Extensions.dll /reference:C:\Users\Joel\.nuget\packages\system.runtime.handles.3.0\ref\netstandard1.3\System.Runtime.Handles.dll /reference:C:\Users\Joel\.nuget\packages\system.runtime.interopservices.3.0\ref\netcoreapp1.1\System.Runtime.InteropServices.dll /reference:C:\Users\Joel\.nuget\packages\system.runtime.interopservices.runtimeinformation.3.0\ref\netstandard1.1\System.Runtime.InteropServices.RuntimeInformation.dll /reference:C:\Users\Joel\.nuget\packages\system.runtime.numerics.3.0\ref\netstandard1.1\System.Runtime.Numerics.dll /reference:C:\Users\Joel\.nuget\packages\system.security.cryptography.algorithms.3.0\ref\netstandard1.6\System.Security.Cryptography.Algorithms.dll /reference:C:\Users\Joel\.nuget\packages\system.security.cryptography.encoding.3.0\ref\netstandard1.3\System.Security.Cryptography.Encoding.dll /reference:C:\Users\Joel\.nuget\packages\system.security.cryptography.primitives.3.0\ref\netstandard1.3\System.Security.Cryptography.Primitives.dll /reference:C:\Users\Joel\.nuget\packages\system.security.cryptography.x509certificates.3.0\ref\netstandard1.4\System.Security.Cryptography.X509Certificates.dll /reference:C:\Users\Joel\.nuget\packages\system.security.principal.3.0\ref\netstandard1.0\System.Security.Principal.dll /reference:C:\Users\Joel\.nuget\packages\system.text.encoding.3.0\ref\netstandard1.3\System.Text.Encoding.dll /reference:C:\Users\Joel\.nuget\packages\system.text.encoding.extensions.3.0\ref\netstandard1.3\System.Text.Encoding.Extensions.dll /reference:C:\Users\Joel\.nuget\packages\system.text.regularexpressions.3.0\ref\netcoreapp1.1\System.Text.RegularExpressions.dll /reference:C:\Users\Joel\.nuget\packages\system.threading.3.0\ref\netstandard1.3\System.Threading.dll /reference:C:\Users\Joel\.nuget\packages\system.threading.tasks.dataflow.7.0\lib\netstandard1.1\System.Threading.Tasks.Dataflow.dll /reference:C:\Users\Joel\.nuget\packages\system.threading.tasks.3.0\ref\netstandard1.3\System.Threading.Tasks.dll /reference:C:\Users\Joel\.nuget\packages\system.threading.tasks.extensions.3.0\lib\netstandard1.0\System.Threading.Tasks.Extensions.dll /reference:C:\Users\Joel\.nuget\packages\system.threading.tasks.parallel.3.0\ref\netstandard1.1\System.Threading.Tasks.Parallel.dll /reference:C:\Users\Joel\.nuget\packages\system.threading.thread.3.0\ref\netstandard1.3\System.Threading.Thread.dll /reference:C:\Users\Joel\.nuget\packages\system.threading.threadpool.3.0\ref\netstandard1.3\System.Threading.ThreadPool.dll /reference:C:\Users\Joel\.nuget\packages\system.threading.timer.3.0\ref\netstandard1.2\System.Threading.Timer.dll /reference:C:\Users\Joel\.nuget\packages\system.xml.readerwriter.3.0\ref\netstandard1.3\System.Xml.ReaderWriter.dll /reference:C:\Users\Joel\.nuget\packages\system.xml.xdocument.3.0\ref\netstandard1.3\System.Xml.XDocument.dll /debug- /debug:portable /filealign:512 /nologo /optimize+ /out:obj\Release\netcoreapp1.1\win7-x86\ConsoleApp1.dll /ruleset:"C:\Program Files (x86)\Microsoft Visual Studio17\Community\Team Tools\Static Analysis Tools\Rule Sets\MinimumRecommendedRules.ruleset" /target:exe /warnaserror- /utf8output /deterministic+ /analyzer:C:\Users\Joel\.nuget\packages\microsoft.codeanalysis.analyzers.1.0\analyzers\dotnet\cs\Microsoft.CodeAnalysis.Analyzers.dll /analyzer:C:\Users\Joel\.nuget\packages\microsoft.codeanalysis.analyzers.1.0\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.Analyzers.dll Program.cs "C:\Users\Joel\AppData\Local\Temp\.NETCoreApp,Version=v1.1.AssemblyAttributes.cs" obj\Release\netcoreapp1.1\win7-x86\TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs obj\Release\netcoreapp1.1\win7-x86\TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs obj\Release\netcoreapp1.1\win7-x86\TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs obj\Release\netcoreapp1.1\win7-x86\ConsoleApp1.AssemblyInfo.cs

目前 VS2017 不会执行此操作,因此您必须转到命令行并 运行 这个。

dotnet publish -c release -r ubuntu.14.04-x64

显然要用你的 debian 风格替换 ubuntu。

这也在我的 csproj 文件中,您可能也需要它。

<OutputType>Exe</OutputType>