首页 > 解决方案 > 创建包含共享项目属性的 nuget - 自动引用

问题描述

我们想创建一个包含 msbuild 属性 (.props) 文件的 nuget。我们通过创建如下 MIL(最重要的行)的 nuspec 来做到这一点:

  <files>
    <file src="SharedProperties.props" target="build\SharedProperties.props" />
  </files>

我们如何更改 .nuspec 定义,以便引用此 nuget 的项目 (.csproj) 将自动包含属性文件(此代码段中的“like”第 3 行):

<?xml version="1.0" encoding="utf-8"?>
  <Project Sdk="Microsoft.NET.Sdk">
    <Import Project="..\Shared\SharedProperties.props" />

(这甚至可能吗?)

标签: visual-studiomsbuildnugetcsproj

解决方案


这是 nuget 包设计的一个特点。并且 nuget 具有自动导入目标机制。请参阅此文档

提示是您应该将目标或道具文件命名为 <package_id>.props 或目标,然后将文件打包到构建文件夹中。就这些。

例如,我创建了一个 lib 项目,然后使用这个 nuspec 文件进行打包:

<?xml version="1.0" encoding="utf-8"?>
<package >
  <metadata>
    <id>test_A</id>
    <version>1.0.0</version>
    <title>me</title>
    <authors>me</authors>
      ......
  </metadata>
<files>
<file src="test_A.props" target="build" />
</files>
</package>

如果我的包被调用test_A.1.0.0.nupkg,则该文件应命名为test_A.propsfile.

然后,当你将nuget包安装到新项目中时,你可以查看<new project>.csproj文件,在nuget安装过程中会自动添加props文件。

在此处输入图像描述

如果使用PackageReference nuget管理格式安装nuget包,在obj\xxx.csproj.nuget.g.propsor文件下添加obj\xxx.csproj.nuget.g.targets文件:

在此处输入图像描述

对于 new-sdk 项目,这也可以。如果你创建一个 new-sdk 类库项目,你可以使用它到 csproj 文件中来打包它:

<None Include="<packages_id>.props" Pack="true" PackagePath="build">

完成后,将新包安装到new-sdk主项目中,你会发现在file下已经自动导入了propsobj\xxx.csproj.nuget.g.props文件。


推荐阅读