Gitlab CI和Xamarin构建失败

x33g5p2x  于 2023-04-27  发布在  Git
关注(0)|答案(2)|浏览(160)

我在Visual Studio for Mac中创建了一个全新的Xamarin Forms App项目,并将其添加到GitLab存储库中。之后,我创建了一个.gitlab-ci.yml文件来设置CI构建。但问题是我收到错误消息:

error MSB4019: The imported project "/usr/lib/mono/xbuild/Xamarin/iOS/Xamarin.iOS.CSharp.targets" was not found. Confirm that the expression in the Import declaration "/usr/lib/mono/xbuild/Xamarin/iOS/Xamarin.iOS.CSharp.targets" is correct, and that the file exists on disk.

Xamarin. Android. Csharp. targets也会弹出此错误。
我的YML文件看起来像这样:

image: mono:latest

stages:
    - build

build:    
    stage: build
    before_script:
        - msbuild -version
        - 'echo BUILDING'
        - 'echo NuGet Restore'
        - nuget restore 'XamarinFormsTestApp.sln'
    script:        
        - 'echo Cleaning'
        - MONO_IOMAP=case msbuild 'XamarinFormsTestApp.sln' $BUILD_VERBOSITY /t:Clean /p:Configuration=Debug

如有帮助将不胜感激;)

brqmpdu1

brqmpdu11#

你将需要一个Mac OS主机来构建Xamarin.iOS应用程序和AFAIK,它还没有在GitLab中。你可以找到discussion hereprivate beta here。现在,我建议你去你自己的MacOS主机和注册的GitLab运行器:
https://docs.gitlab.com/runner/
你可以在你想要的地方(虚拟机或物理设备)设置主机,并在那里安装GitLab运行器和Xamarin环境,标记它并与GitLab管道一起使用,就像任何其他共享运行器一样。

ax6ht2ek

ax6ht2ek2#

从您的问题的评论来看,Xamarin似乎在mono:latest镜像中不可用,但这没关系,因为您可以创建自己的Docker镜像以在Gitlab CI中使用。您需要访问注册表,但如果您使用gitlab.com(而不是自托管示例),则注册表将为所有用户启用。您可以在文档中找到更多信息:https://docs.gitlab.com/ee/user/packages/container_registry/
如果您使用的是自托管,注册表仍然可用(即使是免费版本),但必须由管理员启用(文档在这里:https://docs.gitlab.com/ee/administration/packages/container_registry.html)。
另一种选择是使用Docker自己的注册表Docker Hub。使用什么注册表并不重要,但您必须访问其中一个,以便您的跑步者可以拉下您的图像。如果您使用的是共享跑步者,则尤其如此。(或你的管理员)不能直接控制。如果你能直接控制你的跑步者,另一种选择是在所有需要它的跑步者上构建docker镜像。
我不熟悉Xamarin,但以下是如何基于mono:latest创建新的Docker镜像:

# ./mono-xamarin/Dockerfile
FROM mono:latest # this lets us build off of an existing image rather than starting from scratch. Everything in the mono:latest image will be available in this image
RUN ./install_xamarin.sh # Run whatever you need to in order to install xamarin or anything else you need.
RUN apt-get install git # just an example

一旦你的Dockerfile写好了,你可以像这样构建它:

docker build --file path/to/Dockerfile --tag mono-xamarin:latest

如果你在跑步者身上建立了图像,你可以立即使用它,比如:

# .gitlab-ci.yml
image: mono-xamarin:latest

stages:
  - build
...

否则,您现在可以将其推送到您想要使用的任何注册表。

相关问题