当我发布我的 .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
我在项目文件中的发布设置如下:
- 目标框架:netcoreapp2.1
- 部署模式:依赖框架
- 目标运行时:win-x64
我只打算在 Windows 2016 Server 上发布此应用程序,因此runtimes
不需要 OSX/Linux/Unix 文件夹。更糟糕的是,在某些情况下,这些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 是否会在任何地方记录,它将为您提供所有可能的运行时的所有目标框架?