本文介绍如何制作 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 后缀