Cake Build 4.0.0 запускает методы NuGetRestore и MSBuild, выполняя команду MSBuild CLI. Насколько я понимаю, Cake загружает определенную версию MSBuild. В моем решении это в основном .NET Framework, но наш тестовый проект нацелен на .NET Core 2.1 (в конечном итоге мы переместим весь наш проект на .NET Core 2.1+, но не можем сейчас). У меня возникает следующая ошибка:
C:\git\OurProduct\PPUXL\tools\.dotnet\sdk\2.1.4\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.TargetFrameworkInference.targets(135,5): error : The current .NET SDK does not support targeting .NET Core 2.1. Either target .NET Core 2.0 or lower, or use a version of the .NET SDK that supports .NET Core 2.1. [C:\git\OurProduct\PPUXL\src\Portals\Core\OurProduct.Tests\OurProduct.Tests.csproj]
Поэтому обычно я скачивал бы новый SDK, но мы собираемся запустить скрипт в DevOps Azure на агенте сборки, и SDK не являются частью нашей рабочей станции, но загружаются и компилируются Cake с помощью запускаемого нами скрипта Powershell.
Вот код причины ошибки:
Task("Restore")
.Does(() =>
{
//We need to change this code if we switch from .NET Framework to .NET Core for this project.
NuGetRestore(
solution,
new NuGetRestoreSettings()
{
PackagesDirectory = packagesDirectory
}
);
var projects = GetFiles("./**/*.csproj");
foreach(var project in projects)
{
NuGetRestore(
project,
new NuGetRestoreSettings()
{
PackagesDirectory = packagesDirectory
}
);
}
});
Task("Build")
.Does(() =>
{
MSBuild(
SAMLProject,
new MSBuildSettings()
.SetConfiguration(configuration)
.WithProperty("DeployOnBuild", "true")
.WithProperty("PublishProfile", configuration)
.WithProperty("publishUrl", SAMLDeployDirectory)
.WithProperty("WebPublishMethod", "FileSystem")
);
var projects = GetFiles("./**/*.csproj");
foreach(var project in projects)
{
if(!project.FullPath.Contains("Tests") && !project.FullPath.Contains("SAML"))
{
MSBuild(
project,
new MSBuildSettings()
.SetConfiguration(configuration)
);
}
}
MSBuild(
testProject,
new MSBuildSettings()
.SetConfiguration(configuration)
);
});
Я могу предотвратить ошибку, выполнив следующее:
Task("Restore")
.Does(() =>
{
//We need to change this code if we switch from .NET Framework to .NET Core for this project.
NuGetRestore(
solution,
new NuGetRestoreSettings()
{
PackagesDirectory = packagesDirectory
}
);
var projects = GetFiles("./**/*.csproj");
foreach(var project in projects)
{
if(!project.FullPath.Contains("Tests") && !project.FullPath.Contains("SAML"))
{
NuGetRestore(
project,
new NuGetRestoreSettings()
{
PackagesDirectory = packagesDirectory
}
);
}
}
});
Task("Build")
.Does(() =>
{
MSBuild(
SAMLProject,
new MSBuildSettings()
.SetConfiguration(configuration)
.WithProperty("DeployOnBuild", "true")
.WithProperty("PublishProfile", configuration)
.WithProperty("publishUrl", SAMLDeployDirectory)
.WithProperty("WebPublishMethod", "FileSystem")
);
var projects = GetFiles("./**/*.csproj");
foreach(var project in projects)
{
if(!project.FullPath.Contains("Tests") && !project.FullPath.Contains("SAML"))
{
MSBuild(
project,
new MSBuildSettings()
.SetConfiguration(configuration)
);
}
}
MSBuild(
testProject,
new MSBuildSettings()
.SetConfiguration(configuration)
);
});
Как можно запустить методы сборки для нацеливания на правильные библиотеки .NET Core с помощью Cake? Я хочу, чтобы все происходило внутри моего скрипта Powershell и моего скрипта Cake без влияния на окружающую среду. Заранее спасибо.