【问题标题】:Create nuget containing shared project properties - automatic references创建包含共享项目属性的 nuget - 自动引用
【发布时间】:2021-07-19 16:00:20
【问题描述】:

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

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

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

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

(这可能吗?)

【问题讨论】:

    标签: visual-studio msbuild nuget csproj


    【解决方案1】:

    这是 nuget 包设计的一个特点。并且 nuget 具有自动导入目标机制。见this document

    提示是您应该将目标或道具文件命名为 .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.props文件。

    那么,当你将nuget包安装到新项目时,可以查看&lt;new project&gt;.csproj文件,在nuget安装过程中会自动添加props文件。

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

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

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

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

    【讨论】:

    • 我终于让它工作了。我将我的“道具”文件分成 2 个脚本。第一个定义到其余部分的路径。然后我手动将“导入”行添加到使用 nuget 的 csproj(这是我仍然不喜欢的部分,但它确实有效)。这使我可以保持导入行版本独立。我也受到nuget.org/packages/MSBuild.Microsoft.VisualStudio.Web.targets nuget 的启发。感谢您的帮助。
    【解决方案2】:

    根据documentation,“.props”文件应自动添加到 .csproj 的开头作为导入(.targets 文件应放在末尾)。但是,对于新的 sdk 风格的项目,这似乎不起作用?

    【讨论】:

    • 这也适用于 new-sdk 项目。你可以试试看。
    • 你可以在 csproj 文件下使用这个&lt;None Include="&lt;packages_id&gt;.props" Pack="true" PackagePath="build"&gt;。然后在项目Properties-->Pack上右击生成nupkg(这是new-sdk类库项目)。将这个新包安装到new-sdk项目后,安装时会在obj\xxx.csproj.nuget.g.props文件下导入props文件..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    相关资源
    最近更新 更多