发布.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/
在我的CI / CD服务器上,我使用以下命令发布应用程序:
dotnet publish -c Release -o ..\publish
我在项目文件中的发布设置如下:
我只打算在Windows 2016 Server上发布此应用程序,因此不需要OSX / Linux / Unix runtimes
文件夹。在某些情况下,这些runtimes
文件夹包含已知的易受攻击的dlls
文件夹,这种情况更糟,这会导致OSA扫描误报。
是否可以将项目配置为仅输出win
运行时文件夹?
更新
我尝试了@ahsteele的建议,将RID添加到我的csproj文件的输出与未指定RID的输出相同。
当我运行CI / CD命令示例时
dotnet publish -c Release -r win10-x86 -o ..\publish
我相信它会创建一个独立的部署。当我的发布目录从55MB增加到120MB,从237个文件增加到482个文件。
更新2
我尝试为发布步骤指定启动项目,它可以使运行时目录更紧凑。
这是我正在运行的构建命令:
dotnet publish .\startupProject.csproj -c Release -o ..\publish
这是输出:
- publish/runtimes/
- unix/
- win/
我的解决方案中的某些项目确实指定了netstandard2.0,而某些项目指定了netcoreapp2.0。如果您没有指定目标框架或特定的csproj文件,Microsoft是否会在任何地方进行文档编制,它将为您提供所有可能的运行时的所有目标框架?
答案 0 :(得分:2)
您应该可以使用dotnet publish -r
开关指定运行时。在.NET Core RID Catalog - Windows RIDs中,Windows 10 / Windows Server 2016 RID为:
意味着您的CI / CD命令可以指定运行时:
dotnet publish -c Release -r win10-x86 -o ..\publish
或者,可以在项目文件的<RuntimeIdentifier>
元素中设置一个RID:
<RuntimeIdentifier>win10-x64</RuntimeIdentifier>
可以在项目文件的<RuntimeIdentifiers>
元素中将多个RID定义为以分号分隔的列表:
<RuntimeIdentifiers>win10-x64;win10-x86</RuntimeIdentifiers>