如何使用Chef在Windows上安装Xamarin

我使用ChefconfigurationTeamCity构build代理(Windows Server 2012 VM),并且我需要为Visual Studio / Android构build安装Xamarin。 对于其他安装程序,我通常使用/h/help/?调用它/? -?-h--help直到我得到一个使用对话框,告诉我命令行参数。 我一直无法找出XamarinInstaller.exe的命令行参数,但是,当我启动它像这样:

 XamarinInstaller.exe /quiet /norestart 

因为这些都是常见的惯例,似乎它只是坐在那里,什么都不做。 它应该是下载的东西(这就是当我用GUI启动时),但是当我在任务pipe理器中查看以太网使用情况时,没有什么事情发生。 我不知道它在哪里写日志或如何知道它是否失败。 它失败后似乎不会退出。

这是我的厨师代码:

 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安装程序? 如何与厨师安装?

这是我必须做的,而且有些是不吉利的。

  1. 通过Chocolatey使用chocolatey食谱中的chocolatey_package资源安装android-sdkxamarin-visualstudio
  2. 验证Xamarin安装正常工作。
  3. 将预制的android-sdk.zip解压到$HOME\AppData\Local\Android中,以获得我需要的所有安装在Android SDK *
  4. 验证Android SDK安装是否按预期工作。
  5. 创建一个注册表项,将Xamarin的Visual Studio集成指向相应的Android SDK。

这里是厨师代码:

 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 

*我无法为我的生活得到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 ”。