【问题标题】:Include build directory in nuget package using visual studio pack使用 Visual Studio 包在 nuget 包中包含构建目录
【发布时间】:2018-11-13 13:12:28
【问题描述】:

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

 <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>

【问题讨论】:

    标签: visual-studio msbuild nuget


    【解决方案1】:

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

    根据文档Including content in a package,您应该使用属性&lt;Pack&gt;true&lt;/Pack&gt; 和&lt;PackagePath&gt;build\&lt;/PackagePath&gt;:

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

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

    因此,您可以如下更改您的 ItemGroup:

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

    更新:

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

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

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

    更新2:

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

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

    查看this document了解更多详情。

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

    希望这会有所帮助。

    【讨论】:

    • 我相信这与我添加的相同,但使用不同的 XML 结构并且没有我也尝试过的 Pack 属性(所以现在添加到问题中)。无论如何,两者都有相同的结果——nupkg 中的一个空构建目录。
    • @Nick,检查我的更新答案。如果有什么和你不一样的地方,请免费指出,我会继续关注。
    • 我复制了你的 xml,但它仍然创建了一个空的构建文件夹。我正在使用 Visual Studio for Mac,稍后将尝试 windows,但我认为它也不起作用。这些文件位于构建目录中。 nuspec 文件包含确实有效。
    • @Nick,如您所见,它在我这边运行良好。但是我目前没有VS for MAC环境,所以无法为你验证,你可以在windows上测试一下,如果不行,请通过onedirve分享一个简单的示例项目,我会检查一下。
    • @Nick,您正在使用 .net 框架项目!这就是这个问题的原因。查看我的 Update2 答案以获取详细信息。希望这会有所帮助。
    【解决方案2】:

    这个问题的解决方案是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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      • 2018-12-25
      • 2020-01-08
      相关资源
      最近更新 更多