Windows docker 容器中缺少 Microsoft.Cpp.Default.props

Posted

技术标签:

【中文标题】Windows docker 容器中缺少 Microsoft.Cpp.Default.props【英文标题】:Missing Microsoft.Cpp.Default.props inside Windows docker container 【发布时间】:2021-09-30 11:54:10 【问题描述】:

我正在尝试使用 Visual Studio 构建工具构建 Windows docker 映像。正在安装构建工具,但缺少 Microsoft.Cpp.Default.props。

*error MSB4019: The imported project "C:\
Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Microsoft\VC\v160\Microsoft.Cpp.Default.props" was not found. Confirm that the expression in the Import declaration "C:\P
rogram Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Microsoft\VC\v160\\Microsoft.Cpp.Default.props" is correct, and that the file exists on disk.*

下面是来自 dockerfile 的 sn-p:

FROM mcr.microsoft.com/dotnet/framework/sdk:4.8-windowsservercore-ltsc2019
 
WORKDIR "C:\Users\ContainerUser"

RUN powershell.exe New-Item BuildSoftware -ItemType "directory"

COPY vs_buildtools__1759529960.1620654219.exe "C:\Users\ContainerUser\BuildSoftware"

RUN C:\Users\ContainerUser\SocialBuild\vs_buildtools__1759529960.1620654219.exe --quiet --add --includeRecommended Microsoft.VisualStudio.Workload.ManagedDesktopBuildTools --add Microsoft.VisualStudio.Workload.WebBuildTools --add Microsoft.VisualStudio.Workload.NetCoreBuildTools --add Microsoft.VisualStudio.Component.Windows10SDK.18362 --add Microsoft.VisualStudio.Workload.VCTools –-includeOptional --add Microsoft.Net.Component.4.7.TargetingPack --add Microsoft.VisualStudio.Workload.OfficeBuildTools --add Microsoft.VisualStudio.Workload.UniversalBuildTools --add Microsoft.VisualStudio.Workload.VisualStudioExtensionBuildTools --add Microsoft.VisualStudio.Workload.MSBuildTools --wait

即使使用 Microsoft.VisualStudio.Workload.VCTools,cpp 文件/工具也不会安装在 Docker 容器中。

还尝试在 docker conatiner 中使用 npm install --global --production windows-build-tools 及以下巧克力命令进行安装。

choco install vcredist-all -Y
choco install visualstudio2019buildtools -Y
choco install visualstudio2019community -Y*

寻找问题的最佳解决方案

【问题讨论】:

我现在在同一个地方,你找到解决办法了吗?我正在尝试找出哪些工作负载会添加这些文件。 【参考方案1】:

经过大量谷歌搜索和尝试,我创建了一个包含 *.cpp.props 文件的 Dockerfile:

FROM mcr.microsoft.com/dotnet/framework/sdk:3.5-windowsservercore-ltsc2019
ADD https://aka.ms/vs/16/release/vs_buildtools.exe C:\TEMP\vs_buildtools.exe
SHELL ["cmd", "/S", "/C"]
RUN (start /w C:\TEMP\vs_buildtools.exe --quiet --wait --norestart --nocache modify `
    --installPath "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\BuildTools" `
    --add    Microsoft.VisualStudio.Workload.ManagedDesktopBuildTools `
    --add    Microsoft.VisualStudio.Workload.VCTools --includeRecommended `
    --add    Microsoft.Component.MSBuild `
    --remove Microsoft.VisualStudio.Component.Windows10SDK.10240 `
    --remove Microsoft.VisualStudio.Component.Windows10SDK.10586 `
    --remove Microsoft.VisualStudio.Component.Windows10SDK.14393 `
    --remove Microsoft.VisualStudio.Component.Windows81SDK `
    || IF "%ERRORLEVEL%"=="3010" EXIT 0)
ENTRYPOINT ["C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\Common7\\Tools\\VsDevCmd.bat", "&&", "powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]

标记必须显式添加的 MSBuild 组件。可能不需要“ManagedDesktopBuildTools”,但对于我的项目,我结合了 C#/C++ 解决方案。

【讨论】:

以上是关于Windows docker 容器中缺少 Microsoft.Cpp.Default.props的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 的 Docker 容器中运行测试容器

用户挂载到容器时缺少 Linux 用户组

docker容器中运行windows虚拟机

缺少 docker-current 文件导致 docker 服务无法在 Centos 7 中启动

Windows ServerCore 容器中缺少性能计数器注册表项(天蓝色应用程序洞察 jar)

Windows 10 和 Docker 容器日志/Docker Logging 驱动程序