创建 NuGet 包,在安装时将内容复制到 $(OutputPath) 而不管机器
Create NuGet package that when installed copies content to $(OutputPath) regardless of machine
我正在尝试获取包含在我的 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
testsettings.json
的目标 .csproj
中没有条目
当我构建目标项目时,DLL 转到 $(OutputPath)
但 testsettings.json
没有复制到那里,这是有道理的,因为 Content[=86= 的默认值]节点的动作是None)。但是,我需要它表现得像 <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
.
我想,“好的,我将使用 Properties window 手动将 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: 有没有办法做到这一点,如果有的话怎么做?非常不可取:我是否可以在目标项目中进行手动更改,以便我可以获得一种可靠的方法来复制随处可用的文件?
<ItemGroup>
<Content Include="XXXXX.json">
<PackageCopyToOutput>true</PackageCopyToOutput>
</Content>
</ItemGroup>
应该能满足你的要求。
在您的 NuGet 项目的 xxproj
文件中,添加上述代码并使用 <PackageCopyToOutput>.
在你要测试的新项目中,在安装你的NuGet包之前,记得先clear the NuGet Package cache,然后安装你的NuGet包并构建你的项目,检查XXXXX.json 文件已复制到输出。
相似线程:。
我正在尝试获取包含在我的 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
testsettings.json
的目标
.csproj
中没有条目
当我构建目标项目时,DLL 转到 $(OutputPath)
但 testsettings.json
没有复制到那里,这是有道理的,因为 Content[=86= 的默认值]节点的动作是None)。但是,我需要它表现得像 <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
.
我想,“好的,我将使用 Properties window 手动将 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: 有没有办法做到这一点,如果有的话怎么做?非常不可取:我是否可以在目标项目中进行手动更改,以便我可以获得一种可靠的方法来复制随处可用的文件?
<ItemGroup>
<Content Include="XXXXX.json">
<PackageCopyToOutput>true</PackageCopyToOutput>
</Content>
</ItemGroup>
应该能满足你的要求。
在您的 NuGet 项目的 xxproj
文件中,添加上述代码并使用 <PackageCopyToOutput>.
在你要测试的新项目中,在安装你的NuGet包之前,记得先clear the NuGet Package cache,然后安装你的NuGet包并构建你的项目,检查XXXXX.json 文件已复制到输出。
相似线程: