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

5
我正在尝试使用Visual Studio内置的NuGet包构建创建nupkg,并将我的项目中的构建目录包含在nupkg中。这似乎是一个相当简单的任务,但我无法使其工作。从我的谷歌搜索中得知,将以下任意一项添加到我的csproj文件中都应该可以实现,但两者都会在nupkg中创建一个空的“build”目录:
 <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个回答

9
使用Visual Studio Pack将构建目录包含在NuGet软件包中
根据文档“将内容包含在软件包中”,您应该使用属性<Pack>true</Pack><PackagePath>build\</PackagePath>
如果您要将所有内容复制到特定的根文件夹(而不是content和contentFiles都复制),则可以使用MSBuild property 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

更新2:

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

如果您仍然想在nuget包中包含build目录使用visual studio pack,则需要将项目类型更改为SDK类型:

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

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

希望这可以帮助您。


我相信这与我添加的内容相同,但使用不同的XML结构且没有Pack属性,我也尝试过(现在已添加到问题中)。无论如何,两者都具有相同的结果- nupkg中的空构建目录。 - Nick
@Nick,请查看我的更新答案。如果有任何与您不同的地方,请免费指出,我会继续跟进。 - Leo Liu
我复制了你的xml文件,但它仍然创建了一个空的构建文件夹。我正在使用Mac版的Visual Studio,稍后会尝试Windows版,但我认为它也不起作用。这些文件在构建目录中。nuspec文件包含确实有效。 - Nick
@Nick,正如你所见,它在我的端上运行良好。但是我目前没有VS for MAC环境,所以无法为您验证,您可以在Windows上测试它,如果不起作用,请通过OneDrive共享一个简单的示例项目,我会检查它。 - Leo Liu
@Nick,你可以检查一下,我目前没有VS for MAC环境,所以我不能给你一个准确的答案,等我有空了,我会检查一下。 - Leo Liu
显示剩余5条评论

0
解决此问题的方法是将项目升级为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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接