如何创建一个 nuget 包,将文件复制到消费者的构建输出

问题描述 投票:0回答:1

网上有大量关于创建 nuget 包的材料,但是,似乎也有大量的选项(dotnet pack、nuget.exe pack、msbuild t:pack 等)。我尝试了官方文档中的一些建议,但我所能管理的就是将 *.dll 复制到使用项目的二进制输出文件夹中。我很挣扎,因为我在网上找到的大多数文档都没有提到文档是否谈论当前的 nuget 包输出文件夹或消费者。这种区别对我来说意义重大。

这就是我想要的

  • 我有三个文件:some.dll、some.tlb 和 some.txt。包含在 myNuGetPackage.nupkg 中
  • 当 msbuild 为消费 csproj 运行时,我希望将它们全部复制到消费解决方案/csproj 的二进制输出文件夹
  • 在消费 csproj 中使用
    <PackageReference>
  • 我不一定要构建 myNuGetPackage.csproj,因为我没有创建任何东西。我有这些文件并想将它们压缩。如果没有其他选择,除了创建 myNuGetPackage.csproj,我会这样做。
  • 我希望解决方案尽可能简单。我更愿意打开一个像“nuget package explorer”这样的工具,添加我的三个文件,但我认为这是不可能的?
  • 我认为这并不重要,但我想瞄准 .NETFramework 4.8

这是我尝试过但失败的方法:

  • 我只尝试使用
    nuget.exe pack my.nuspec
  • 创建自己的 my.nuspec
  • copyToOutput
    来自
    contentFiles
    参见这里

这是我的具体内容

myPackage.nuspec

<?xml version="1.0"?>
<package >
  <metadata>
    <id>myPackage</id>
    <version>1.0.0</version>
    <authors>me</authors>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>bla bla</description>
    <dependencies>
      <group targetFramework=".NETFramework4.8.0" />
    </dependencies>
        <contentFiles>
            <files include="**/*.tlb" buildAction="None" copyToOutput="true" flatten="true" />
            <files include="any/any/*.txt" buildAction="Compile" copyToOutput="true" flatten="true"/>
            <files include="any/any/*.xml" buildAction="EmbeddedResource" copyToOutput="true" flatten="true"/>
        </contentFiles>
  </metadata>
</package>

我的文件结构是

lib\net48\my.dll
--> 被复制以构建消费者的输出

content\any\any\my.tlb
content\any\any\my.xml
content\any\any\my.txt
--> 这些都不会被复制来构建消费者的输出。

我注意到我的所有文件都包含在 .nupkg 中,并且无论我将

<users>\packages\myPackage\1.0.0\content\any\any
设置为
copyToOutput
还是
true
,它们都被提取到
false
。这告诉我,
copyToOutput
实际上应该将文件复制到使用的构建文件夹中。为什么它在我的情况下不起作用?

c# msbuild nuget
1个回答
0
投票

以下是您可以遵循的一些简单步骤:

  1. 将您正在使用的项目打包为 Nuget 包
  2. nuget 添加 C:\location-of-pack-file\myPackage.1.1.0.nupkg -source C:\Output 乌盖特
  3. 更新解决方案中的 nuget 版本
© www.soinside.com 2019 - 2024. All rights reserved.