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

Nic*_*ick 2 msbuild visual-studio nuget

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

 <ItemGroup>
    <None Include="build\**">
      <Pack>true</Pack>
      <PackagePath>build\</PackagePath>
      <IncludeInPackage>true</IncludeInPackage>
    </None>
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

使用nuget pack与我nuspec下面创建包不工作:

  <files>
        <!-- Include everything in \build -->
    <file src="build\**" target="build" />
  </files>
Run Code Online (Sandbox Code Playgroud)

Leo*_*SFT 8

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

根据文档包括包中的内容,您应该使用属性<Pack>true</Pack><PackagePath>build\</PackagePath>

如果您只想将所有内容复制到特定的根文件夹(而不是 content 和 contentFiles),您可以使用 MSBuild 属性 ContentTargetFolders,默认为“content;contentFiles”,但可以设置为任何其他文件夹名称。

PackagePath可以是一组以分号分隔的目标路径。指定空包路径会将文件添加到包的根目录。

因此,您可以像下面这样更改您的 ItemGroup:

  <ItemGroup>
    <None Include="build\**" Pack="True" PackagePath="build\" />
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

更新:

我相信这与我添加的内容相同,但使用不同的 XML 结构并且没有 Pack 属性

Pack属性是关键点。它适用于您的 XML 结构和 Pack 属性。您应该确保您的项目文件夹中的build文件夹中有这些文件:

在此处输入图片说明

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

在此处输入图片说明

更新2:

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

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

查看此文档以获取更多详细信息。

然后就可以使用我们之前讲过的方法了。

希望这可以帮助。


Nic*_*ick 0

此问题的解决方案是将项目升级为 SDK 类型(Xamarin 绑定项目默认使用旧格式,但似乎可以使用新类型),然后使用:

<ItemGroup>
    <None Update="build\**">
        <IncludeInPackage>true</IncludeInPackage>
    </None>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

包含构建目录。另一种方法是使用nuget pack.

转换项目时,请确保保留 Xamarin 导入:

<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.ObjCBinding.CSharp.targets" />
Run Code Online (Sandbox Code Playgroud)

这是我的项目文件之后的样子:

<?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>
Run Code Online (Sandbox Code Playgroud)