Как упаковать все зависимости проекта netstandard2.0 в один пакет? - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть инструмент, который поддерживает API плагинов - он загружает данную сборку во время выполнения.

Теперь я реализую плагин для этого инструмента.Целевой фреймворк является .NET Standard 2.0.Плагин зависит от двух других пакетов NuGet.

Я хочу создать пакет NuGet с плагином и всеми его зависимостями внутри, поскольку в противном случае инструмент не сможет его загрузить.Но папка bin \ Debug \ netstandard2 не содержит никаких зависимостей.

Как мне это сделать?

1 Ответ

0 голосов
/ 29 декабря 2018

Глупый я.Это то, что делает dotnet publish.

Теперь я должен найти лучший способ упаковать его.

Я получил следующий скрипт:

param($BuildNumber = $env:BUILD_BUILDNUMBER, [switch]$NoPublish = $($env:BUILD_REASON -eq 'PullRequest'))

$ErrorActionPreference = "Stop"

$Properties = @{
    BuildNumber = $BuildNumber
    SourceRevisionId = $(git rev-parse --short HEAD)
    RepositoryUrl = $(git remote get-url origin)
}
$BranchName = $env:BUILD_SOURCEBRANCHNAME
if (!$BranchName)
{
    $BranchName = git rev-parse --abbrev-ref HEAD
}

$MSBuildProperties = $Properties.GetEnumerator() | Where-Object { 
    $_.Value
} | ForEach-Object { 
    "/p:{0}={1}" -f $_.Key,$_.Value 
}

Write-Host "Building ..."
dotnet publish -v:q -nologo -c Release $MSBuildProperties
if ($LastExitCode)
{
    exit $LastExitCode
}

Write-Host "Packing ..."
$MainAssemblyName = (Get-Item *.sln).BaseName
$MainAssemblyPath = "$PSScriptRoot\src\bin\Release\netstandard2\publish\$MainAssemblyName.dll"
$NuspecFile = $($MainAssemblyPath.Replace('.dll', '.nuspec'))
$VersionInfo = (Get-Item $MainAssemblyPath).VersionInfo
@"
<?xml version="1.0"?>
<package>
  <metadata>
    <id>$MainAssemblyName</id>
    <version>$($VersionInfo.ProductVersion)</version>
    <authors>Mark Kharitonov</authors>
    <owners>$($VersionInfo.CompanyName)</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>$($VersionInfo.Comments)</description>
    <copyright>$($VersionInfo.LegalCopyright)</copyright>
    <projectUrl>$($Properties.RepositoryUrl)</projectUrl>
    <repository type="git"
                url="$($Properties.RepositoryUrl)"
                branch="$BranchName"
                commit="$($Properties.SourceRevisionId)" />
  </metadata>
  <files>
    <file src="*.*" target="tools" />
  </files>
</package>
"@ | Out-File -Encoding utf8 $NuspecFile

Remove-Item src\bin\Release\*.nupkg -ErrorAction SilentlyContinue
dotnet pack -v:q -nologo -c Release --no-build -p:NuspecFile=$NuspecFile
if ($LastExitCode)
{
    exit $LastExitCode
}

if (!$NoPublish)
{
    Write-Host "Publishing ..."
    $NuGetPkg = (Get-Item src\bin\Release\*.nupkg).FullName
    dotnet nuget -v Error push $NuGetPkg -s http://devstatic/NuGetServer/nuget
}

Исходный код имеет следующий Directory.Build.props:

<Project>
  <PropertyGroup>
    <NoWarn>NU5105</NoWarn>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

    <Version>$([System.Text.RegularExpressions.Regex]::Match($(BuildNumber), `\d+\.\d+(?:.\d+)?(?:.\d+)?`))</Version>
    <Company>YabaDabaDoo, Inc.</Company>
    <CurrentYear>$([System.DateTime]::Now.Year)</CurrentYear>
    <CopyrightYears Condition="$(CurrentYear) == 2018">2018</CopyrightYears>
    <CopyrightYears Condition="$(CurrentYear) != 2018">2018-$(CurrentYear)</CopyrightYears>
    <Copyright>Copyright © $(CopyrightYears) by $(Company) All rights reserved.</Copyright>
    <Product>Log DbUpgrade Progress</Product>
    <AssemblyTitle>Log DbUpgrade Progress</AssemblyTitle>
    <Description>Logs the progress of the DbUpgrade tool to a file, which can later be used to send AppInsights metrics.</Description>
    <NeutralLanguage>en-US</NeutralLanguage>
    <Title>$(AssemblyTitle)</Title>
    <!-- Setting nuspec Owners property from msbuild is currently not supported. At the moment it is set to be equal Authors. -->
    <Authors>$(Company)</Authors>
  </PropertyGroup>
</Project>

Это самое простое, что у меня есть, без дублирования какой-либо конфигурации.

...