Я занимаюсь интеграцией проекта Xamarin Android в наш конвейер CI. Мы уже используем CakeBuild для других проектов .NET, поэтому я хотел использовать его и здесь.
Проблема в том, что при сборке с помощью Cake я всегда получаю следующее сообщение об ошибке:
C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(406,2): error : Could not load assembly 'mscorlib, Version=0.0.0.0, Culture=neutral, PublicKeyToken='. Perhaps it doesn't exist in the Mono for Android profile? [C:\[myproject].csproj]
Сборка работает в Visual Studio 2015 и с использованием командной строки разработчика Visual Studio. Из-за этого я подумал, что это как-то связано с переменными среды, которые устанавливаются в VS и через командную строку VS. Итак, я сделал небольшой командный файл:
call "%vs140comntools%vsvars32.bat"
Powershell.exe ./build.ps1 -Target Build
Но я получаю точно такую же ошибку. В моих проектах нет явной ссылки на mscorlib.
Задача сборки Cake выглядит так:
Task("Build")
.IsDependentOn("Restore-NuGet-Packages")
.Does(() =>
{
var settings = new MSBuildSettings()
{
ArgumentCustomization = args =>
{
args = args.Append("/t:PackageForAndroid");
args = args.Append("/p:TargetFrameworkRootPath=\"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\"");
return args;
},
Verbosity = Verbosity.Normal
};
settings.SetConfiguration(configuration);
MSBuild("../myproject.csproj", settings);
});
Мне пришлось добавить TargetFrameworkRootPath, потому что он не найдет эталонные сборки, если я не укажу его явно.
Мне интересно, что еще сделать для репликации среды сборки командной строки VS / VS.





Вы ориентируетесь на .NET Standard или все еще использует PCL? Как выглядит подробный вывод? Он должен дать вам точную выполняемую команду MSBuild.
call "%vs140comntools%vsvars32.bat"
Powershell.exe ./build.ps1 -Target Build -Verbosity Diagnostic