Скопируйте папку содержимого nuget в выходную папку проекта

#nuget-package

#nuget-package

Вопрос:

Я создал пакет nuget с такой структурой:

NugetName/lib/net/*.dll

NugetName/contentFiles/A/*.dll

NugetName/contentFiles/B/*.dll

 
> <?xml version="1.0" encoding="utf-8"?> <package
> xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">  
> <metadata>
>     <id>..</id>
>     <version>1.0.0.22</version>
>     <title>...</title>
>     <authors>...</authors>
>     <owners>..</owners>
>     <requireLicenseAcceptance>false</requireLicenseAcceptance>
>     <description>...</description>     
>     <contentFiles>
>       <files include="contentFilesA" buildAction="content" copyToOutput="true" flatten="true" />       
>       <files include="contentFilesB" buildAction="content" copyToOutput="true" flatten="true" />
>     </contentFiles> 
>  </metadata> 
>  <files>
>     <file src="BuildDebug*.dll" target="libnet" />
>     <file src="BuildDebugA*.dll" target="contentFilesA"  />   
>     <file src="BuildDebugB*.dll" target="contentFilesB"  />   
>  </files>    
> </package>

  

И теперь мне нужно скопировать папки A и B в выходную папку проекта, но это не так!
После установки пакета nuget копируются только файлы NugetName/lib/net/* .dll, а файлы A и B — нет!

Ответ №1:

После тестирования различных способов я пришел к этому решению. Сначала я отправил файлы dll в Buildпапку вместо папки содержимого.

 <files>
    <file src="BuildDebug*.*" target="libnet" />
    <file src="BuildDebugA*.dll" target="buildA"  />    
    <file src="BuildDebugB*.dll" target="buildB"  />    
    <file src="MyTargetFile.targets" target="buildMyTargetFile.targets" />
</files>
  

Затем я создал целевой файл в Buildпапке.
Это новая структура моего пакета nuget:

  •Build
   •A
      •*.dll
   •B
      •*.dll
   •MyTargetFile.target

 •lib
  • net
     •*.dll
  

В целевом файле я определил, как скопировать папку с помощью MSBuild:

 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <ItemGroup>
    <NativeLibs Include="$(MSBuildThisFileDirectory)***.dll" />
    <None Include="@(NativeLibs)">
      <Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>
  

Наконец, я создал новый пакет nuget и установил его, и когда я создал проект, папки A и B копируются в выходную папку.