【发布时间】: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 输入IncludeContentInPack 和ContentTargetFolders 的默认值,它们分别是true 和content;contentFiles。
当我构建包时,我得到以下结构,其中testsettings.json 出现在.nupkg 的contentFiles\any\netcoreapp3.1 和content 文件夹中。
当我将包安装到目标.csproj时,
-
testsettings.json file已按预期添加到项目的根文件夹中 -
<PackageReference Include="..." Version="..."/>行按预期添加到目标.csproj - 目标
.csproj中没有出现testsettings.json的条目
当我构建目标项目时,DLL 转到 $(OutputPath) 但 testsettings.json 没有复制到那里,这是有道理的,因为 Content 节点的默认操作是 None)。但是,我需要它表现得像 <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>。
我想,“好的,我将使用 Properties 窗口手动更改 testsettings.json 以 Copy 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.exe 和 testhost.dll 以某种方式神奇地出现在正确的位置,尽管它们的源 NuGet 包的 .nuspec 和结构与我的相似。这让我对修改 NuGet 包的.nuspec、.nupkg、构建序列等需要做些什么感到不知所措。
Preferable:有没有办法做到这一点,如果有,怎么做?非常不可取:是否可以在目标项目中进行手动更改,以便获得可靠的方法来复制在任何地方都可以使用的文件?
【问题讨论】:
标签: visual-studio msbuild nuget nuget-package nuget-spec