Как упаковать стандартный пакет NuGet .NET, не перестраивая его? - PullRequest
0 голосов
/ 01 декабря 2018

Как упаковать стандартный пакет NuGet .NET с его спецификациями Nuget в файл CSProj, не перестраивая его?

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

Когда я пытаюсь использовать интерфейс командной строки nuget, происходит сбой:

Error NU5012: Unable to find 'bin\Debug\LibraryNuGetExample\bin\Debug\'. Make sure the project has been built.

Это не имеет смысла, поскольку это не папка вывода сборки!Правильная папка вывода - bin\Debug\** - я не понимаю, почему она ищет это сопоставление каталогов, которое я нигде не указывал.

Я пытался использовать это, но оно перестроено что я определенно не хочу;просто nuget pack:

MSBuild LibraryNuGetExample.csproj /t:pack

Так что мне либо нужно знать, как,

  1. Использовать MSBuid только для упаковки, а не для сборки пакета с некоторыминеизвестные на данный момент параметры
  2. Используйте CLI NuGet с неизвестными на данный момент параметрами, чтобы упаковать его
  3. Некоторые другие умные вещи, которые я еще не рассматривал :)

LibraryNuGetExample.csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>uap10.0;net45</TargetFrameworks>
    <PackageId>LibraryForNuGetExample</PackageId>
    <Authors>user name</Authors>
    <Company>ACME</Company>
    <Product>Library For NuGet Example</Product>
    <Description>A test package to test automation.</Description>
    <Copyright>ACME © 2018</Copyright>
    <PackageTags>DevOps Builds Testing</PackageTags>
    <PackageVersion>$(AssemblyVersion)</PackageVersion>
    <Platforms>x64;AnyCPU</Platforms>
    <NeutralLanguage>en-US</NeutralLanguage>
  </PropertyGroup>

  <PropertyGroup Condition="'$(TargetFramework)' == 'uap10.0'">
    <NugetTargetMoniker>UAP,Version=v10.0</NugetTargetMoniker>
    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
    <TargetPlatformVersion>10.0.15063.0</TargetPlatformVersion>
    <TargetPlatformMinVersion>10.0.15063.0</TargetPlatformMinVersion>
    <TargetFrameworkIdentifier>.NETCore</TargetFrameworkIdentifier>
    <TargetFrameworkVersion>v5.0</TargetFrameworkVersion>
    <DefineConstants>$(DefineConstants);WINDOWS_UWP</DefineConstants>
    <LanguageTargets>$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets</LanguageTargets>
  </PropertyGroup>

   <ItemGroup>
    <None Include="LibraryForNuGetExample.targets" Pack="true" PackagePath="build\uap10.0" />
  </ItemGroup>

  <ItemGroup Condition=" '$(TargetFramework)' == 'uap10.0' ">
    <PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform " Version="5.2.2" />
  </ItemGroup>

  <ItemGroup>
    <Reference Include="Windows">
      <HintPath>C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.15063.0\Windows.winmd</HintPath>
      <IsWinMDFile>true</IsWinMDFile>
      <Private>true</Private>
    </Reference>
  </ItemGroup>

  <Target Name="CopyPackage" AfterTargets="Pack" Condition="'$(IsCrossTargetingBuild)' == 'true'">
    <Copy SourceFiles="$(OutputPath)$(PackageId).$(PackageVersion).nupkg" DestinationFolder="$(SolutionDir)Packages" />
  </Target>

</Project>

LibraryForNuGetExample.targets

<?xml version="1.0" encoding="utf-8" ?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Condition="'$(TargetPlatformIdentifier)' == 'UAP'">
    <ReferenceCopyLocalPaths>
        Include="$(MSBuildThisFileDirectory)bin\Release\uap10.0\LibraryNuGetExample.dll"
        Include="$(MSBuildThisFileDirectory)bin\Release\uap10.0\LibraryNuGetExample.pdb"
        Include="$(MSBuildThisFileDirectory)bin\Release\uap10.0\LibraryNuGetExample.pri"
    </ReferenceCopyLocalPaths>
  </ItemGroup>
  <ItemGroup Condition="'$(TargetPlatformIdentifier)' == 'NET45'">
    <ReferenceCopyLocalPaths>
        Include="$(MSBuildThisFileDirectory)bin\Release\net45\LibraryNuGetExample.dll"
        Include="$(MSBuildThisFileDirectory)bin\Release\net45\LibraryNuGetExample.pdb"
        Include="$(MSBuildThisFileDirectory)bin\Release\net45\LibraryNuGetExample.pri"
    </ReferenceCopyLocalPaths>
  </ItemGroup>
</Project>

1 Ответ

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

Вы можете использовать эквивалент

dotnet pack --no-build

, который для MSBuild (поскольку вы создаете для UAP) равен

msbuild -t:Pack -p:NoBuild=true
...