NuGet 包目标 - 如何在构建时将文件复制到目标目录的子文件夹?

标签 nuget nuget-package

我正在尝试将两个文本文件添加到我的 nuget 包中,以便当包的用户构建项目时,一个文件被复制到构建目录的根目录,而另一个文件被复制到像这样 Root

\bin\Debug\ - 1.TXT
            - SubFolder\  - 2.TXT

此目录结构是包中程序集的要求,这些程序集将在运行时在那些特定位置查找这些文件。

基于此https://stackoverflow.com/a/30386836/1462656 还有这个https://stackoverflow.com/a/44752745/1462656

我能够创建一个将 1.txt 复制到根目录的目标文件,但是当我将包添加到项目并构建它时,它只会复制 2.txt 到根目录。我创建了一个build文件夹如下

enter image description here

我的目标文件看起来像这样

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <ItemGroup>
  <None Include="$(MSBuildThisFileDirectory)1.txt">
     <Link>1.txt</Link>
     <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  </None>
  <None Include="$(MSBuildThisFileDirectory)SubFolder\2.txt">
     <Link>2.txt</Link>
     <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  </None>  
 </ItemGroup>
</Project>

如何创建子文件夹并将文件复制到该文件夹​​?

最初我使用 content 文件夹将我的内容文件和子文件夹添加到 nuget 包中,但我发现虽然文件以正确的目录结构添加到解决方案本身,但文件添加的属性设置为“不复制”,因此它们不会复制到构建目录 - 所以我改用上述方法。有没有办法结合这两种方法?

最佳答案

我想我用下面的方法解决了它

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <ItemGroup>
    <RequiredFiles Include="$(MSBuildThisFileDirectory)**\*" />
    <None Include="@(RequiredFiles)">
     <Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
     <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  </None>  
 </ItemGroup>
</Project>

基于此处找到的解决方案 https://stackoverflow.com/a/30316946/1462656

关于NuGet 包目标 - 如何在构建时将文件复制到目标目录的子文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55418907/

相关文章:

c# - 我如何解决 Nuget DLL Hell - 无论我做什么 VS 都坚持认为 dll 版本与包中的版本不同

c# - OrmLite.SqlServer 程序集出错

c# - Azure函数队列触发器添加Nuget包

nuget - 预构建事件中的包管理器控制台命令

sql-server - 为 Dacpac 和 Powershell 脚本创建 Nuget 包

c#-4.0 - Ninject.Extensions.Logging.Log4net 意外行为

visual-studio-2013 - NuGet 包管理器在 VS 2013 上停留在 "Retrieving information..."

visual-studio - 安装 NuGet 包时如何更改 packages.config 位置

c# - 此命名空间需要什么 NuGet?

command-line - 从命令行获取 NuGet.exe 版本