如何使用Chef在Windows上安装Xamarin

时间:2016-06-14 14:58:56

标签: windows visual-studio xamarin chef windows2012

我使用Chef配置我的TeamCity构建代理(Windows Server 2012 VM),我需要为Visual Studio / Android构建安装Xamarin。对于其他安装程序,我通常会使用/h/help/?-?-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安装它?

1 个答案:

答案 0 :(得分:2)

这是我必须做的事情,其中​​一些有点不稳定。

  1. 使用android-sdk食谱中的xamarin-visualstudio资源,通过Chocolatey安装chocolatey_packagechocolatey
  2. 验证Xamarin安装是否按预期工作。
  3. 将预制的android-sdk.zip解压缩到$HOME\AppData\Local\Android,以便在Android SDK *中安装我需要的所有内容
  4. 验证Android SDK安装是否按预期工作。
  5. 创建一个注册表项,将Xamarin的Visual Studio集成指向相应的Android SDK。
  6. 这是在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 Manager甚至不会非法运行,除非它能够检测到它是由用户运行的?不确定,但最后无奈之下,我手动运行命令来安装必要的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"如上所述。