[build] PackDotNet target to simplify .NET 6 development (#4931)
When working on .NET 6, I use the following powershell function for
my "developer loop":
function pack-xa-nugets([string] $configuration = 'Debug')
{
& msbuild $xa\build-tools\xa-prep-tasks\xa-prep-tasks.csproj
& msbuild $xa\Xamarin.Android.sln -p:DisableApiCompatibilityCheck=true
& msbuild /t:CreateAllPacks build-tools/create-packs/Microsoft.Android.Sdk.proj
Remove-Item -r $xa\packages\microsoft.android.* -ErrorAction SilentlyContinue
}
The steps here are:
1. Build `xa-prep-tasks.csproj` so the `_CreateVersion` MSBuild target
can run and [update git versioning information][0].
2. Build `Xamarin.Android.sln`.
3. Run `CreateAllPacks`, to create all the `.nupkg` files.
4. Delete any previously extracted files in `packages/microsoft.android.*`
Step (4) is particularly important for sanity. Otherwise, I have
attempted to build a project, but NuGet did not extract the new
`.nupkg` files because their versions were the same!
Because no one else has this script, I ported it to MSBuild so it can
live in this repo and work on all platforms.
On Windows:
msbuild Xamarin.Android.sln /t:PackDotNet
On macOS:
make pack-dotnet
Down the road we could improve this workflow further by copying files
directly. The `PackDotNet` target currently takes about 40 seconds
to execute on my Windows desktop machine.
[0]: 9c88098391/build-tools/xa-prep-tasks/xa-prep-tasks.targets (L4)
This commit is contained in:
Родитель
d7227b80ea
Коммит
443266f155
|
@ -1,5 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildThisFileDirectory)build-tools\scripts\DotNet.targets" />
|
||||||
<Import Project="$(MSBuildThisFileDirectory)build-tools\scripts\ImportExportDocs.targets" />
|
<Import Project="$(MSBuildThisFileDirectory)build-tools\scripts\ImportExportDocs.targets" />
|
||||||
<Import Project="$(MSBuildThisFileDirectory)build-tools\scripts\PrepareWindows.targets" Condition=" '$(OS)' == 'Windows_NT' " />
|
<Import Project="$(MSBuildThisFileDirectory)build-tools\scripts\PrepareWindows.targets" Condition=" '$(OS)' == 'Windows_NT' " />
|
||||||
<Import Project="$(MSBuildThisFileDirectory)build-tools\scripts\RunTests.targets" />
|
<Import Project="$(MSBuildThisFileDirectory)build-tools\scripts\RunTests.targets" />
|
||||||
|
|
|
@ -72,6 +72,37 @@ and Windows (.vsix) installer files can be built with:
|
||||||
Commercial installers will be created by this command if the
|
Commercial installers will be created by this command if the
|
||||||
`make prepare-external-git-dependencies` command was ran before building.
|
`make prepare-external-git-dependencies` command was ran before building.
|
||||||
|
|
||||||
|
# Creating .NET 6 NuGet packages
|
||||||
|
|
||||||
|
Once `make all` or `make jenkins` have completed, you can build the .NET 6
|
||||||
|
packages with:
|
||||||
|
|
||||||
|
make pack-dotnet
|
||||||
|
|
||||||
|
Several `.nupkg` files will be output in `./bin/BuildDebug/nupkgs/`, you
|
||||||
|
can use these with a `nuget.config` such as:
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<packageSources>
|
||||||
|
<add key="dotnet5" value="https://dnceng.pkgs.visualstudio.com/public/_packaging/dotnet5/nuget/v3/index.json" />
|
||||||
|
<add key="local-xa" value="/full/path/to/bin/BuildDebug/nupkgs" />
|
||||||
|
</packageSources>
|
||||||
|
</configuration>
|
||||||
|
```
|
||||||
|
|
||||||
|
Then use a `global.json` for the locally built version of the packages:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"msbuild-sdks": {
|
||||||
|
"Microsoft.Android.Sdk": "11.0.100-ci.master.11"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
See the [One .NET Documentation](../../guides/OneDotNet.md) for further details.
|
||||||
|
|
||||||
# Building Unit Tests
|
# Building Unit Tests
|
||||||
|
|
||||||
|
|
|
@ -87,6 +87,38 @@ So for example:
|
||||||
[windows_path]: https://www.java.com/en/download/help/path.xml
|
[windows_path]: https://www.java.com/en/download/help/path.xml
|
||||||
[set_alias]: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/set-alias?view=powershell-6
|
[set_alias]: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/set-alias?view=powershell-6
|
||||||
|
|
||||||
|
# Creating .NET 6 NuGet packages
|
||||||
|
|
||||||
|
Once `Xamarin.Android.sln` is built, you can build the .NET 6 packages
|
||||||
|
with:
|
||||||
|
|
||||||
|
msbuild Xamarin.Android.sln /t:PackDotNet
|
||||||
|
|
||||||
|
Several `.nupkg` files will be output in `.\bin\BuildDebug\nupkgs\`, you
|
||||||
|
can use these with a `nuget.config` such as:
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<packageSources>
|
||||||
|
<add key="dotnet5" value="https://dnceng.pkgs.visualstudio.com/public/_packaging/dotnet5/nuget/v3/index.json" />
|
||||||
|
<add key="local-xa" value="C:\full\path\to\bin\BuildDebug\nupkgs" />
|
||||||
|
</packageSources>
|
||||||
|
</configuration>
|
||||||
|
```
|
||||||
|
|
||||||
|
Then use a `global.json` for the locally built version of the packages:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"msbuild-sdks": {
|
||||||
|
"Microsoft.Android.Sdk": "11.0.100-ci.master.11"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
See the [One .NET Documentation](../../guides/OneDotNet.md) for further details.
|
||||||
|
|
||||||
# Building Unit Tests
|
# Building Unit Tests
|
||||||
|
|
||||||
Once `msbuild Xamarin.Android.sln` has completed, the unit tests may
|
Once `msbuild Xamarin.Android.sln` has completed, the unit tests may
|
||||||
|
|
3
Makefile
3
Makefile
|
@ -104,6 +104,9 @@ endif
|
||||||
all-tests::
|
all-tests::
|
||||||
MSBUILD="$(MSBUILD)" $(call MSBUILD_BINLOG,all-tests,tools/scripts/xabuild) /restore $(MSBUILD_FLAGS) Xamarin.Android-Tests.sln
|
MSBUILD="$(MSBUILD)" $(call MSBUILD_BINLOG,all-tests,tools/scripts/xabuild) /restore $(MSBUILD_FLAGS) Xamarin.Android-Tests.sln
|
||||||
|
|
||||||
|
pack-dotnet::
|
||||||
|
$(call MSBUILD_BINLOG,pack-dotnet,$(_SLN_BUILD)) $(MSBUILD_FLAGS) Xamarin.Android.sln /t:PackDotNet
|
||||||
|
|
||||||
install::
|
install::
|
||||||
@if [ ! -d "bin/$(CONFIGURATION)" ]; then \
|
@if [ ! -d "bin/$(CONFIGURATION)" ]; then \
|
||||||
echo "run 'make all' before you execute 'make install'!"; \
|
echo "run 'make all' before you execute 'make install'!"; \
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
<Project>
|
||||||
|
<Target Name="PackDotNet">
|
||||||
|
<PropertyGroup>
|
||||||
|
<_TopDir>$(MSBuildThisFileDirectory)..\..\</_TopDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<MSBuild Projects="$(_TopDir)build-tools\xa-prep-tasks\xa-prep-tasks.csproj" />
|
||||||
|
<MSBuild Projects="$(_TopDir)Xamarin.Android.sln" Properties="DisableApiCompatibilityCheck=true" />
|
||||||
|
<MSBuild Projects="$(_TopDir)build-tools\create-packs\Microsoft.Android.Sdk.proj" Targets="CreateAllPacks" />
|
||||||
|
<!-- Clean up old, previously restored packages -->
|
||||||
|
<ItemGroup>
|
||||||
|
<_OldPackages Include="$(_TopDir)packages\microsoft.android.*\**\*.nupkg" />
|
||||||
|
<_DirectoriesToRemove Include="%(_OldPackages.RootDir)%(_OldPackages.Directory)" />
|
||||||
|
</ItemGroup>
|
||||||
|
<RemoveDir Directories="@(_DirectoriesToRemove)" />
|
||||||
|
</Target>
|
||||||
|
</Project>
|
Загрузка…
Ссылка в новой задаче