如何制作 NuGet 包

本文介绍如何制作 NuGet 包,配置示例以及如何通过 NuGet 包修改源文件和配置文件

参考:NuGet pack and restore as MSBuild targets

1. 基本情况#

新版本 Visual Studio 创建的工程都是基于 PackageReference format,可以在项目文件中配置 NuGet 包相关属性,然后通过 右键项目 -> 打包,生成 .nupkg 包,不需要手动配置 .nuspec 文件

注意:.NET Framework 项目不要从 packages.config 迁移到 PackageReference 。否则 content目录下的文件不会自动添加到项目中。

2. 通过添加以下配置到项目文件将生成的 .nupkg 包复制到指定路径:#

<Target Name="CopyPackage" AfterTargets="Pack">
  <Copy
    SourceFiles="$(OutputPath)..\$(PackageId).$(PackageVersion).nupkg"
    DestinationFolder="\\myshare\packageshare\"
    />
</Target>

3. 示例配置:#

<!-- 打包自述文件,在安装包之后会自动打开该文件 -->
<ItemGroup>
  <Content Include="readme.txt">
    <Pack>true</Pack>
    <PackagePath>\</PackagePath>
  </Content>
</ItemGroup>

<!-- 打包配置文件,在安装包之后会自动包含进项目,
同时该文件的生成操作是:无,复制到输出目录:如果较新则复制 -->
<ItemGroup>
  <!-- 指定buildAction -->
  <None Include="nlog.config">
    <Pack>true</Pack>
    <PackagePath>content;contentFiles\any\any</PackagePath>
    <PackageCopyToOutput>true</PackageCopyToOutput>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </None>
</ItemGroup>

4. buildAction 有以下可选值:#

  • Compile
  • EmbeddedResource
  • ApplicationDefinition
  • Page
  • Resource
  • SplashScreen
  • DesignData
  • DesignDataWithDesignTimeCreateableTypes
  • CodeAnalysisDictionary
  • AndroidAsset
  • AndroidResource
  • BundleResource
  • None

5. 通过 NuGet 包修改源代码和配置文件#

参考:Source and config file transformations for NuGet packages

5.1 源代码令牌替换:#

对于需要令牌替换的源文件,需要在文件名后面添加 .pp 后缀 令牌不区分大小写,格式为 $token$,可用的 token 列表:ProjectProperties Interface (VSLangProj)

5.2 配置文件替换:#

配置文件替换需要在文件名后面添加 .transform 后缀

❤️ 如果这篇文章对你有帮助,欢迎赞助支持我继续维护 ❤️

☕ Support me ⚡ 爱发电赞助