[英]When publishing how do I target specific .NET Core Runtimes?
When I publish my .NET Core app, it outputs a runtimes
directory with the following sub-directories: 当我发布我的.NET Core应用程序时,它会输出一个带有以下子目录的
runtimes
目录:
- 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/
On my CI/CD server I publish my applications with this command: 在我的CI / CD服务器上,我使用以下命令发布我的应用程序:
dotnet publish -c Release -o ..\publish
My publish settings in the project file are the following: 我在项目文件中的发布设置如下:
I only plan to publish this application on Windows 2016 Server so the OSX/Linux/Unix runtimes
folders are not necessary. 我只计划在Windows 2016 Server上发布此应用程序,因此不需要OSX / Linux / Unix
runtimes
文件夹。 Worse in several cases these runtimes
folders contain known vulnerable dlls
which lead to false positive OSA scans. 更糟糕的是,在某些情况下,这些
runtimes
文件夹包含已知的易受攻击的dlls
,这会导致误报OSA扫描。
Is there a way to configure the project to only output the win
runtime folder? 有没有办法将项目配置为仅输出
win
运行时文件夹?
Update 更新
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. 我已经尝试了@ahsteele的建议,并且将RID添加到我的csproj文件的输出与我没有指定RID的情况相同。
When I run CI/CD command example 当我运行CI / CD命令示例时
dotnet publish -c Release -r win10-x86 -o ..\publish
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.
我的发布目录从55MB变为120MB,从237个文件变为482个文件。
Update 2 更新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
And this is the output: 这是输出:
- publish/runtimes/
- unix/
- win/
Some of the projects in my solution do specify netstandard2.0 and some specify netcoreapp2.0. 我的解决方案中的一些项目确实指定了netstandard2.0,一些指定了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?
Microsoft是否记录了如果您未指定目标框架或特定csproj文件的任何地方,它将为您提供所有可能的运行时的所有目标框架?
You should be able to specify your runtime with the dotnet publish -r
switch. 您应该能够使用dotnet publish
-r
开关指定运行时。 From the .NET Core RID Catalog - Windows RIDs the Windows 10 / Windows Server 2016 RIDs are: 从.NET Core RID目录 - Windows RIDs Windows 10 / Windows Server 2016 RID是:
Meaning that your CI/CD command can specify the runtime: 这意味着您的CI / CD命令可以指定运行时:
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>
元素中设置单个RID:
<RuntimeIdentifier>win10-x64</RuntimeIdentifier>
Multiple RIDs can be defined as a semicolon-delimited list in the project file's <RuntimeIdentifiers>
element: 可以在项目文件的
<RuntimeIdentifiers>
元素<RuntimeIdentifiers>
多个RID定义为以分号分隔的列表:
<RuntimeIdentifiers>win10-x64;win10-x86</RuntimeIdentifiers>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.