Visual Studio 如何使用Chef在Windows上安装Xamarin

m1m5dgzv  于 2023-01-05  发布在  Windows
关注(0)|答案(1)|浏览(161)

我配置TeamCity构建代理(Windows Server 2012 VM)使用Chef,而且我需要为Visual Studio/Android构建安装Xamarin。对于其他安装程序,我通常使用X1 M0 N1 X,X1 M1 N1 X,X1 M2 N1 X,X1 M3 N1 X调用它,-h--help,直到出现一个告诉我命令行参数的用法对话框。但是,我一直无法弄清楚XamarinInstaller.exe的命令行参数,当我像这样启动它时:

XamarinInstaller.exe /quiet /norestart

因为这些都是常见的约定,它似乎只是坐在那里,什么也不做。它应该是下载的东西(当我用GUI启动它时,它就是这么做的),但当我在任务管理器中查看以太网使用情况时,什么也没发生。我不知道它在哪里写日志,也不知道如何知道它是否发生了故障。当它发生故障时,它似乎没有退出。
下面是我的厨师代码:

xamarinTargets = 'C:\\Program Files (x86)\\MSBuild\\Xamarin\\Android\\Xamarin.Android.CSharp.targets'

xamarinInstaller = 'C:\\Repo\\Xamarin\\XamarinInstaller.exe'

execute "Xamarin" do
  command "#{xamarinInstaller} /quiet /norestart"
  not_if { ::File.exist?(xamarinTargets) }
end

我如何无意识地调用Xamarin安装程序?我如何用Chef安装它?

vojdkbi0

vojdkbi01#

这是我不得不做的,其中一些有点不稳定。
1.使用chocolatey cookbook中的chocolatey_package资源通过Chocolatey安装android-sdkxamarin-visualstudio
1.验证Xamarin安装是否按预期运行。
1.将预制的android-sdk.zip解压缩到$HOME\AppData\Local\Android中,以便在Android SDK* 中安装所需的所有内容
1.验证Android SDK安装是否按预期运行。
1.创建一个注册表项,将Xamarin的Visual Studio集成指向适当的Android SDK。
下面是Chef代码:

xamarinTargets = 'C:\\Program Files (x86)\\MSBuild\\Xamarin\\Android\\Xamarin.Android.CSharp.targets'

chocolatey_package 'android-sdk'
chocolatey_package 'xamarin-visualstudio'

ruby_block "Verify Xamarin MSBuild targets exist" do
    block do
        if not ::File.exist?(xamarinTargets)
            raise "Did not find #{xamarinTargets} which was supposed to have been created by the Xamarin install"
        end
    end
end

homeDir = "C:\\Users\\#{ENV['User']}"
androidDir = "#{homeDir}\\AppData\\Local\\Android"
androidSdk = "#{androidDir}\\android-sdk"
androidSdkZip = "C:\\Repo\\Android\\android-sdk.zip"
adbExe = "#{androidSdk}\\platform-tools\\adb.exe"

seven_zip_archive "Android SDK API level 15" do
    path androidDir
    source androidSdkZip
    overwrite true
    not_if { ::File.exist?(adbExe) }
end

ruby_block "Verify Android adb.exe exists" do
    block do
        if not ::File.exist?(adbExe)
            raise "Did not find #{adbExe} which was supposed to have been created by the Android SDK install"
        end
    end
end

registry_key 'HKEY_USERS\\S-1-5-18\\Software\\Novell\\Mono\ for\ Android' do
  values [{
    :name => "AndroidSdkDirectory",
    :type => :string,
    :data => androidSdk
  }]
  recursive true
  action :create
end
  • 当通过Chef调用android update sdk时,我一辈子都无法让它工作。Android SDK管理器似乎无法以非图形方式运行,除非它能检测到它正在由用户运行?!不确定,但最后在绝望中,我手动运行命令来安装必要的SDK(我需要API级别15)和构建工具:
android update sdk --no-ui --all --filter "tools,platform-tools,build-tools-23.0.3,android-15"

然后,我将得到的$HOME\AppData\Local\Android\android-sk目录压缩为上面提到的“预制android-sdk.zip“。

相关问题