Создайте Nuget для net461 с копией содержимого для вывода

Я создал пакет nuget, предназначенный для проекта .NET Core. Идея здесь состоит в том, чтобы добавить xxx.dll в качестве ссылки с локальным копированием как false и скопировать все библиотеки DLL в подпапку в пути вывода и все файлы ресурсов в подпапку\resources

Nuspec, нацеленный на NET Core 3, работает нормально.

Теперь я хочу сделать то же самое для NET Framework 4.6.1.

Но файлы содержимого не добавляются в проект. Это мой файл nuspec:

<?xml version="1.0"?>
<package  xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
  <metadata>    
    <id>xxx.Win.x64.ForIPS11</id>
    <version>15.5.3.4</version>
    <title>xxx toolkit</title>
    <authors>xxx Team</authors>
    <owners>xxx</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>xxx 15.5.3.4 x64 Windows to .NETFramework 4.6.1 for IPS 11</description>
    <releaseNotes></releaseNotes>
    <copyright>2020</copyright>
    <tags></tags>
    <dependencies>
      <group targetFramework=".NETFramework4.6.1" />
    </dependencies>
    <contentFiles>
        <files include="**\subfolder\resources\*.*"  buildAction="Content" copyToOutput="true" />
        <files include="**\subfolder\*.dll" buildAction="Content" copyToOutput="true" />
    </contentFiles>
  </metadata>
  <files>
    <file src="bin\xxx.dll" target="lib\net461" />
    <file src="resources\*.*" target="contentFiles\any\any\subfolder\resources"  />
    <file src="bin\*.dll" target="contentFiles\any\any\subfolder" />    
  </files>
</package>

Использовал ли я несовместимый тег для цели .NET Framework? Есть идеи, как это сделать?

РЕДАКТИРОВАТЬ: я использую файл packages.config в VS2017 в целевом проекте.


person Whiletrue    schedule 23.12.2019    source источник


Ответы (1)


contentFiles несовместим с package.config.

Это альтернатива:

Нуспек файл:

<?xml version="1.0"?>
<package  xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
  <metadata>    
    <id>xxx.Win.x64.ForIPS11</id>
    <version>0.0.0</version>
    <title>xxx toolkit</title>
    <authors>xxx Team</authors>
    <owners>xxx</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>xxx 0.0.0 x64 Windows to .NETFramework 4.6.1</description>
    <releaseNotes></releaseNotes>
    <copyright>2020</copyright>
    <dependencies>
       <group targetFramework=".NETFramework4.6.1" />
    </dependencies>
    <tags></tags>
  </metadata>
  <files>
    <file src="bin\xxx.dll" target="lib\net461" />
    <file src="resources\*.*" target="build\subfolder\resources"  />
    <file src="bin\*.dll" target="build\subfolder" />
    <file src="xxx.Win.x64.targets" target="build" />
    <file src="install.ps1" target="tools" />
  </files>
 </package>

xxx.Win.x64.targets для копирования подпапки на выход

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

и install.ps1, чтобы пометить локальную копию как ложную для ссылки

param($installPath, $toolsPath, $package, $project)
$asms = $package.AssemblyReferences | %{$_.Name} 
foreach ($reference in $project.Object.References) 
{
    if ($asms -contains $reference.Name + ".dll") 
    {
        $reference.CopyLocal = $false;
    }
}
person Whiletrue    schedule 24.12.2019