【问题标题】:Create NuGet package that when installed copies content to $(OutputPath) regardless of machine创建 NuGet 包,在安装时将内容复制到 $(OutputPath) 而不管机器
【发布时间】:2021-11-05 16:05:40
【问题描述】:

我正在尝试在构建目标时将包含在我的 NuGet 包中的内容文件复制到目标 C# 项目的 $(OutputPath)(在我的情况下为 bin\Debug\netcoreapp3.1,所有 DLL 都在此结束) .这需要在开发者的盒子在构建机器上工作。这是我目前所拥有的。

我创建了一个带有内容节点的 NuGet 包项目

<ItemGroup>
  <Content Include="testsettings.json">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content>
</ItemGroup>

我使用pack target 输入IncludeContentInPackContentTargetFolders 的默认值,它们分别是truecontent;contentFiles

当我构建包时,我得到以下结构,其中testsettings.json 出现在.nupkgcontentFiles\any\netcoreapp3.1content 文件夹中。

当我将包安装到目标.csproj时,

  • testsettings.json file 已按预期添加到项目的根文件夹中
  • &lt;PackageReference Include="..." Version="..."/&gt; 行按预期添加到目标 .csproj
  • 目标.csproj 中没有出现testsettings.json 的条目

当我构建目标项目时,DLL 转到 $(OutputPath)testsettings.json 没有复制到那里,这是有道理的,因为 Content 节点的默认操作是 None)。但是,我需要它表现得像 &lt;CopyToOutputDirectory&gt;PreserveNewest&lt;/CopyToOutputDirectory&gt;

我想,“好的,我将使用 Properties 窗口手动更改 testsettings.jsonCopy if newer”:

这会向目标.csproj 添加一个节点,如下所示:

<ItemGroup>
  <Content Update="C:\redacted\path\to\nuget\cache\package.name\N.N.N\contentFiles\any\netcoreapp3.1\testsettings.json">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content>
</ItemGroup>

非常适合我的机器。这对于任何构建机器和任何其他开发人员的机器都将失败,因为该路径是特定我的机器的。

如何创建包,以便在安装包时以可重复的方式在正确的位置获取testsettings.json

在对此进行研究的过程中,我注意到 testhost.exetesthost.dll 以某种方式神奇地出现在正确的位置,尽管它们的源 NuGet 包的 .nuspec 和结构与我的相似。这让我对修改 NuGet 包的.nuspec.nupkg、构建序列等需要做些什么感到不知所措。

Preferable:有没有办法做到这一点,如果有,怎么做?非常不可取:是否可以在目标项目中进行手动更改,以便获得可靠的方法来复制在任何地方都可以使用的文件?

【问题讨论】:

    标签: visual-studio msbuild nuget nuget-package nuget-spec


    【解决方案1】:
    <ItemGroup>
        <Content Include="XXXXX.json">
            <PackageCopyToOutput>true</PackageCopyToOutput>     
        </Content>
    </ItemGroup>
    

    应该满足您的要求。

    在你的 NuGet 项目的 xxproj 文件中,添加类似上面的代码并使用 PackageCopyToOutput>。

    在您要测试的新项目中,在安装您的 NuGet 包之前,记得先clear the NuGet Package cache,然后安装您的 NuGet 包并构建您的项目,检查 XXXXX.json 文件是否已复制到输出。

    类似线程:Copy JSON file to bin from class library nuget package

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多