使用Visual Studio Pack将构建目录包含在nuget包中

时间:2018-11-13 13:12:29

标签: visual-studio msbuild nuget

我正在尝试使用内置的nuget软件包构建工具通过Visual Studio创建一个nupkg,并将我项目中的构建目录包含在nupkg中。看来这应该是一个相当简单的任务,但我无法使其正常工作。通过我的谷歌搜索,可以将其中任何一个添加到我的csproj文件中,但是两者都在nupkg中创建了一个空的“ build”目录:

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

在我的nuspec中使用nuget pack创建包含以下内容的程序包确实可行:

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

2 个答案:

答案 0 :(得分:1)

  

使用Visual Studio Pack将构建目录包含在nuget软件包中

根据文档Including content in a package,应使用属性<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属性一起使用。您应确保文件位于项目文件夹的文件夹中:内部版本

enter image description here

在下面查看我的测试演示:

enter image description here

Update2:

啊!您正在使用.net framework项目!就是这个问题的原因。默认情况下,此方法用于.net standard.net core项目,不适用于.net framework。要解决此问题,您必须使用.nupsec文件,就像您在问题中发帖一样。

如果您仍想使用Visual Studio Pack 将构建目录包含在nuget软件包中,则需要将项目类型更改为 SDK 类型:

检查this document了解更多详细信息。

然后您可以使用我们之前讨论过的方法。

希望这会有所帮助。

答案 1 :(得分:0)

此问题的解决方案是upgrade the project to SDK type(默认情况下,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>