发布时如何针对特定的 .NET Core 运行时? [英] When publishing how do I target specific .NET Core Runtimes?
问题描述
当我发布我的 .NET Core 应用程序时,它会输出一个带有以下子目录的 runtimes
目录:
When I publish my .NET Core app, it outputs a runtimes
directory with the following sub-directories:
- publish/runtimes/
- debian.8-x64/
- fedora.23-x64/
- fedora.24-x64/
- opensuse.13.2-x64/
- opensuse.42.1-x64/
- osx/
- osx.10.10-x64/
- rhel.7-x64/
- ubuntu.14.04-x64/
- ubuntu.16.04-x64/
- ubuntu.16.10-x64/
- unix/
- win/
在我的 CI/CD 服务器上,我使用以下命令发布我的应用程序:
On my CI/CD server I publish my applications with this command:
dotnet publish -c Release -o ..publish
我在项目文件中的发布设置如下:
My publish settings in the project file are the following:
- 目标框架:netcoreapp2.1
- 部署模式:依赖于框架
- 目标运行时:win-x64
我只打算在 Windows 2016 Server 上发布此应用程序,因此不需要 OSX/Linux/Unix runtimes
文件夹.更糟糕的是,在某些情况下,这些 runtimes
文件夹包含已知易受攻击的 dll
,这会导致 OSA 扫描误报.
I only plan to publish this application on Windows 2016 Server so the OSX/Linux/Unix runtimes
folders are not necessary. Worse in several cases these runtimes
folders contain known vulnerable dlls
which lead to false positive OSA scans.
有没有办法将项目配置为只输出win
运行时文件夹?
Is there a way to configure the project to only output the win
runtime folder?
更新
我已经尝试了@ahsteele 的建议,将 RID 添加到我的 csproj 文件的输出与我没有指定 RID 的输出相同.
I have tried the suggestions by @ahsteele and the output of adding the RIDs to my csproj files is the same as if I did not specify the RIDs.
当我运行 CI/CD 命令示例时
When I run CI/CD command example
dotnet publish -c Release -r win10-x86 -o ..publish
我相信它创建了一个独立的部署.我的发布目录从 55MB 到 120MB,从 237 个文件到 482 个文件.
I believe it creates a self-contained deployment. As my publish directory goes from being 55MB to 120MB and from 237 files to 482 files.
更新 2
我尝试为发布步骤指定我的启动项目,它构建的运行时目录更紧凑.
I have tried specifying my startup project for the publish step and it builds the run time directories to be more compact.
这是我正在运行的构建命令:
Here is the build command I am running:
dotnet publish .startupProject.csproj -c Release -o ..publish
这是输出:
- publish/runtimes/
- unix/
- win/
我的解决方案中的某些项目确实指定了 netstandard2.0,而有些则指定了 netcoreapp2.0.如果您不指定目标框架或特定的 csproj 文件,Microsoft 是否记录在任何地方,它将为您提供所有可能运行时的所有目标框架?
Some of the projects in my solution do specify netstandard2.0 and some specify netcoreapp2.0. Does Microsoft document anywhere that if you don't specify a target framework or a specific csproj file, it will give you all of the target frameworks for all of the possible runtimes?
推荐答案
您应该能够使用 dotnet publish -r
开关.来自 .NET Core RID 目录 - Windows RID Windows 10/Windows Server 2016 RID 是:
You should be able to specify your runtime with the dotnet publish -r
switch. From the .NET Core RID Catalog - Windows RIDs the Windows 10 / Windows Server 2016 RIDs are:
- win10-x64
- win10-x86
- win10-arm
- win10-arm64
意思是你的 CI/CD 命令可以指定运行时:
Meaning that your CI/CD command can specify the runtime:
dotnet publish -c Release -r win10-x86 -o ..publish
Alternatively a single RID can be set in the <RuntimeIdentifier>
element of your project file:
<RuntimeIdentifier>win10-x64</RuntimeIdentifier>
Multiple RIDs can be defined as a semicolon-delimited list in the project file's <RuntimeIdentifiers>
element:
<RuntimeIdentifiers>win10-x64;win10-x86</RuntimeIdentifiers>
这篇关于发布时如何针对特定的 .NET Core 运行时?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!