Включите каталог сборки в пакет nuget, используя пакет Visual Studio - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь создать nupkg в Visual Studio, используя встроенную сборку пакетов nuget, и включить каталог сборки из моего проекта в nupkg.Кажется, это должно быть довольно простой задачей, но я не могу заставить ее работать.Из моего поиска в Google добавление любого из них в мой файл csproj должно работать, но оба создают пустой каталог 'build' в nupkg:

 <ItemGroup>
    <None Include="build\**">
      <Pack>true</Pack>
      <PackagePath>build\</PackagePath>
      <IncludeInPackage>true</IncludeInPackage>
    </None>
  </ItemGroup>

Используя nuget pack для создания пакета со следующим в моем nuspecработает:

  <files>
        <!-- Include everything in \build -->
    <file src="build\**" target="build" />
  </files>

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Решением этой проблемы было обновить проект до типа SDK (проекты привязки Xamarin по умолчанию используют старый формат, но, похоже, работают с новым типом), а затем используют:

<ItemGroup>
    <None Update="build\**">
        <IncludeInPackage>true</IncludeInPackage>
    </None>
</ItemGroup>

Чтобы включить каталог сборки.Альтернативой является использование nuget pack.

. При преобразовании проекта обязательно оставьте в импорте Xamarin:

<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.ObjCBinding.CSharp.targets" />

Вот как будет выглядеть мой файл проекта:

<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
  <PropertyGroup>
    <PackageId></PackageId>
    <PackageVersion>3.3.2</PackageVersion>
    <ReleaseVersion>$(PackageVersion)</ReleaseVersion>
    <AssemblyVersion>$(PackageVersion)</AssemblyVersion>
    <Authors>Nick Brook</Authors>
    <Description></Description>
    <Copyright></Copyright>
    <PackageProjectUrl></PackageProjectUrl>
    <Summary></Summary>
    <PackageTags></PackageTags>
    <Title></Title>
    <PackageReleaseNotes>Initial Release</PackageReleaseNotes>
    <OutputType>Library</OutputType>
    <IPhoneResourcePrefix>Resources</IPhoneResourcePrefix>
    <OutputPath>bin\$(Configuration)</OutputPath>
    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <Optimize>true</Optimize>
    <PackageOutputPath>packed</PackageOutputPath>
    <PackOnBuild>true</PackOnBuild>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="Xamarin.iOS" />
  </ItemGroup>
  <ItemGroup>
    <ObjcBindingApiDefinition Include="ApiDefinition.cs" />
  </ItemGroup>
  <ItemGroup>
    <ObjcBindingCoreSource Include="Structs.cs" />
  </ItemGroup>
  <ItemGroup>
    <Compile Remove="Structs.cs" Condition=" '$(EnableDefaultCompileItems)' == 'true' " />
    <Compile Remove="ApiDefinition.cs" Condition=" '$(EnableDefaultCompileItems)' == 'true' " />
  </ItemGroup>
  <ItemGroup>
    <None Remove="packed\**" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="Xamarin.Build.Download" Version="0.4.11" />
    <PackageReference Include="NuGet.Build.Packaging" Version="0.2.2" />
  </ItemGroup>
  <ItemGroup>
    <None Update="build\**">
      <IncludeInPackage>true</IncludeInPackage>
    </None>
  </ItemGroup>
  <Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.ObjCBinding.CSharp.targets" />
</Project>
0 голосов
/ 13 ноября 2018

Включение каталога сборки в пакет nuget с использованием пакета Visual Studio

В соответствии с документом Включение содержимого в пакет следует использовать свойства <Pack>true</Pack> и<PackagePath>build\</PackagePath>:

Если вы хотите скопировать весь свой контент только в определенные корневые папки (вместо content и contentFiles), вы можете использовать свойство MSBuild ContentTargetFolders, которое по умолчанию равно"content; contentFiles", но может быть задано любое другое имя папки.

PackagePath может быть набором целевых путей, разделенных точкой с запятой.Указание пустого пути к пакету добавит файл в корень пакета.

Таким образом, вы можете изменить свою ItemGroup следующим образом:

  <ItemGroup>
    <None Include="build\**" Pack="True" PackagePath="build\" />
  </ItemGroup>

Обновление:

Я считаю, что это то же самое, что я добавил, но в другой структуре XML и без атрибута Pack

Атрибут Pack является ключевым моментом,Он отлично работает с вашей XML-структурой и атрибутом Pack.Убедитесь, что у вас есть файлы в папке build в папке вашего проекта :

enter image description here

Проверьте мое тестовое демо ниже:

enter image description here

Update2:

Ах!Вы используете проект .net framework !!Вот причина этого вопроса.Этот метод используется для проектов .net standard и .net core по умолчанию и не работает для .net framework.Чтобы решить эту проблему, вы должны использовать файл .nupsec, как вы пишете в вопросе.

Если вы все еще хотите включить каталог сборки в пакет nuget с помощью пакета Visual Studio Pack , вам нужно изменить тип проекта на SDK type:

Проверьте этот документ для получения более подробной информации.

Затем вы можете использовать метод, о котором мы говорили ранее.

Надеюсь, это поможет.

...