【问题标题】:Project SDK (.Net Standard): Official way to create a nuget package that includes msbuild targets项目 SDK(.Net 标准):创建包含 msbuild 目标的 nuget 包的官方方式
【发布时间】:2019-11-12 08:02:36
【问题描述】:

Visual Studio 2019、.Net 标准 2.0

如何为使用项目包含自定义 msbuild 目标文件? 官方支持的执行方式是什么?

我已经试过了:

Nuspec:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>TestingNugetContent</id>
    <version>1.0.10</version>
    <title>Blah</title>
    <authors>Me</authors>
    <owners>Me</owners>
    <licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl>
    <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl>
    <iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Blah</description>
    <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
    <copyright>Copyright 2019</copyright>
    <tags>Tag1 Tag2</tags>
  </metadata>
  <files>
    <file src="Immutable\*.*" target="content/Immutable/" />
    <file src="Build\*.*" target="build/netstandard2.0/" />
  </files>
</package>
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>netstandard2.0</TargetFrameworks>
  </PropertyGroup>

  <PropertyGroup>
    <NoPackageAnalysis>true</NoPackageAnalysis>
    <NuspecFile>TestingNugetContent.nuspec</NuspecFile>
    <IntermediatePackDir>$(MSBuildProjectDirectory)/bin/$(Configuration)/publish/</IntermediatePackDir>
    <PublishDir>$(IntermediatePackDir)$(TargetFramework)/</PublishDir>
    <NuspecProperties>publishDir=$([MSBuild]::NormalizeDirectory($(IntermediatePackDir)))</NuspecProperties>
    <Version>1.0.10</Version>
  </PropertyGroup>

  <ItemGroup>
    <Compile Remove="build\**" />
    <EmbeddedResource Remove="build\**" />
    <None Remove="build\**" />
  </ItemGroup>

  <ItemGroup>
    <None Include="build\netstandard2.0\TestingNugetContent.targets" />
  </ItemGroup>

  <Target Name="PublishAll" BeforeTargets="GenerateNuspec">
    <ItemGroup>
      <_TargetFramework Include="$(TargetFrameworks)" />
    </ItemGroup>
    <MSBuild Projects="$(MSBuildProjectFullPath)" Targets="Publish" Properties="TargetFramework=%(_TargetFramework.Identity)" />
  </Target>


</Project>

检查消费者的 .csproj.nuget.g.targets 文件,安装 Nuget 包后,此自定义目标的导入项目标签缺失

【问题讨论】:

    标签: sdk package nuget project target


    【解决方案1】:

    根据文档,the props and targets file names must match the package id exactly。您的nuspec&lt;id&gt; 列为TestingNugetContent,因此文件必须是TestingNugetContent.propsTestingNugetContent.targets。它们应该直接在包中的build/ 文件夹中,或者在build/&lt;tfm&gt;/ 文件夹中(我更喜欢更明确,所以我感谢您使用netstandard2.0 TFM)。现在,您的 csproj 似乎指定了一个 build\netstandard2.0\TestingNugetContent.targets,这看起来是正确的,所以我只能猜测它没有以某种方式打包到正确的位置。

    我目前没有时间展示如何打包的示例,但是您可以使用 NuGet package explorer 检查您的 nupkg 的内容,或者将其打开为 zip 文件,看看有什么“错误” ",然后调整您的项目并重试。

    仅供参考,您根本不需要使用 nuspec,您可以使用 MSBuild PackagePath metadata on items 指定 MSBuild 项目的打包位置。我不清楚你的PublishAll 目标的目的是什么。如果您在尝试包含目标文件时添加了它,则可以将其删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-25
      相关资源
      最近更新 更多