【发布时间】:2023-08-01 16:22:01
【问题描述】:
我已添加 .props 文件并将其包含在 .nuspec 文件中。 在我的 .props 文件中,我在 PropertyGroup 中添加了新的属性/元素。 安装我的 nuget 包后,.props 文件在 .csproj 文件中成功导入。但是如何在 HintPath 中包含/添加道具文件属性/变量(不是手动)。
【问题讨论】:
标签: c# msbuild nuget nuget-package csproj
我已添加 .props 文件并将其包含在 .nuspec 文件中。 在我的 .props 文件中,我在 PropertyGroup 中添加了新的属性/元素。 安装我的 nuget 包后,.props 文件在 .csproj 文件中成功导入。但是如何在 HintPath 中包含/添加道具文件属性/变量(不是手动)。
【问题讨论】:
标签: c# msbuild nuget nuget-package csproj
为您的 nugets 使用 HintPath 和 .nuspec 是遗留方法的一个指标,请考虑 PackageReference 和 SDK style csproj 相反,根本没有提示路径,它们都是自动的。
提示路径的遗产
提示路径通常用作 nuget 安装程序集的引用项的项元数据。旧项目格式是在 nuget 是外部工具时开发的(现在它是 .Net SDK 的一部分)。当时的方法是让 packages.config(你不再需要它)和安装到项目中的 nugets 列表,并且在安装包时它必须出现在 .net 的其余部分工具作为一组常规的侧载程序集,这就是为什么 DLL 文件被恢复到“包”文件夹(这不再发生),并且参考项被添加到项目中,其 HintPath 具有相对此“包”文件夹的路径。这包括整个引用图,因此如果 PackageA 使用 PackageB,则两者都部署到“包”文件夹,并且都在每个包的所有库上生成引用项。通过这种方式,遗留工具用于将包管理带入现有生态系统。对于新的 PacakgeReference 方法,您只需指定*包,所有临时引用将在恢复和构建时自动处理。
自定义目标
既然你提到你的 nuspec 中有 props 文件,让我澄清一下现在如何在 SDK 样式 csproj 在你正在发布的包中实现它(没有 nuspec,所有 nuspec数据现在在 csproj 中):
<ItemGroup>
<None Include="your_custom.props_or_targets">
<Pack>true</Pack>
<PackagePath>build</PackagePath>
</None>
</ItemGroup>
因此,目标路径在 PackagePath 项元数据中指定,它应该是 build 以表示这是可自动安装的目标。
现在在安装这样的包时,在传统方法中,消费者项目会自动具有“导入”节点,以明确地将这个目标带到项目中。现在在新的 SDK 方法中,如果您使用 PackageReference 导入这样的包,您将找不到 Import 节点 - 它实际上是隐式假设的,所以如果有问题的包在构建文件夹中有目标和道具 - 所有这些都将自动导入构建时间(不在设计时间)。
包参考
<ItemGroup>
<PackageReference Include="YourPackage" Version="3.6.0" />
</ItemGroup>
因此,如果您使用这样的项目,这足以使用您在此包中使用自定义道具带来的属性。像往常一样随意使用它们,希望你不再需要 HintPath。
【讨论】: