Xamarin构建在Windows docker容器内失败(_ComputeAndroidResourcePaths失败)

时间:2020-09-08 13:41:12

标签: visual-studio xamarin xamarin.forms xamarin.android

我有一个Win docker容器,其中安装了Visual Studio 2019和xamarin组件。 当我运行“ msbuild my-solution.sln” / t:Build / p:Configuration =“ Release” / p:AndroidSdkDirectory =“ C:\ Android” 时,出现以下错误:

    "_ComputeAndroidResourcePaths:
  Creating directory "obj\Release\100\res\".
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1107,2): error X
ARLP7023: System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\KDI\src\KDI\KDI\KDI.Android\obj\Release\100\lp\
0\jl\__res_name_case_map.txt'. [C:\KDI\src\KDI\KDI\KDI.Android\KDI.Android.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1107,2): error X
ARLP7023:    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) [C:\KDI\src\KDI\KDI\KDI.Android\KDI.Android.cspro
j]
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1107,2): error X
ARLP7023:    at System.IO.File.InternalDelete(String path, Boolean checkHost) [C:\KDI\src\KDI\KDI\KDI.Android\KDI.Android.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1107,2): error X
ARLP7023:    at System.IO.File.Delete(String path) [C:\KDI\src\KDI\KDI\KDI.Android\KDI.Android.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1107,2): error X
ARLP7023:    at Xamarin.Android.Tools.Files.CopyIfStreamChanged(Stream stream, String destination) [C:\KDI\src\KDI\KDI\KDI.Android\KD
I.Android.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1107,2): error X
ARLP7023:    at Xamarin.Android.Tools.Files.ExtractAll(ZipArchive zip, String destination, Action`2 progressCallback, Func`2 modifyCa
llback, Func`2 deleteCallback, Func`2 skipCallback) [C:\KDI\src\KDI\KDI\KDI.Android\KDI.Android.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1107,2): error X
ARLP7023:    at Xamarin.Android.Tasks.ResolveLibraryProjectImports.Extract(IDictionary`2 jars, ICollection`1 resolvedResourceDirector
ies, ICollection`1 resolvedAssetDirectories, ICollection`1 resolvedEnvironments) [C:\KDI\src\KDI\KDI\KDI.Android\KDI.Android.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1107,2): error X
ARLP7023:    at Xamarin.Android.Tasks.ResolveLibraryProjectImports.RunTask() [C:\KDI\src\KDI\KDI\KDI.Android\KDI.Android.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1107,2): error X
ARLP7023:    at Xamarin.Android.Tasks.AndroidTask.Execute() [C:\KDI\src\KDI\KDI\KDI.Android\KDI.Android.csproj]

我检查了路径,似乎缺少__res_name_case_map.txt。

这是dockerfile:

 # escape=`

# Use the latest Windows Server Core image with .NET Framework 4.8.
FROM mcr.microsoft.com/dotnet/framework/sdk:3.5-windowsservercore-ltsc2019

# Restore the default Windows shell for correct batch processing.
SHELL ["cmd", "/S", "/C"]


# Download the Build Tools bootstrapper.
#ADD https://aka.ms/vs/16/release/vs_buildtools.exe C:\TEMP\vs_buildtools.exe
ADD https://download.visualstudio.microsoft.com/download/pr/befdb1f9-8676-4693-b031-65ee44835915/c541feeaa77b97681f7693fc5bed2ff82b331b168c678af1a95bdb1138a99802/vs_Community.exe C:\TEMP\vs2019.exe

RUN C:\TEMP\vs2019.exe --quiet --wait --norestart --nocache --includeRecommended --includeOptional`
   --add Microsoft.VisualStudio.Workload.NetCrossPlat `
 || IF "%ERRORLEVEL%"=="3010" EXIT 0
  

ENTRYPOINT ["powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]

1 个答案:

答案 0 :(得分:0)

问题是我在容器启动期间映射了项目文件夹(docker run -v project:/ project),也许我机器上的Visual Studio阻止了在构建过程中创建这些文件。现在我在dockerfile中复制并工作。但是,该图像将在gitlab CI中用作基础图像,并且代码将自动添加。