dotnet pack создает пакет, который не совместим с проектом .Net Core при использовании файла nuspec - PullRequest
0 голосов
/ 26 сентября 2018

Я создаю пакет NuGet, который содержит .Net Standard DLL и файл конфигурации.Предполагается, что этот проект будет поддерживать как .Net Core, так и .Net Framework.

В двух словах, упаковка этого DLL-файла и файла конфигурации с использованием dotnet pack и файла .nuspec создаетпакет, который не «полностью совместим» с .Net Core:

enter image description here

Подробнее здесь:

В проекте .csproj Я добавляю .nuspec ссылку на файл:

<NuspecFile>.\MyProject.nuspec</NuspecFile>

, рядом с которой у меня есть следующий .nuspec файл:

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <id>MyProject</id>
        <version>1.0.0</version>
        <authors> </authors>
        <description>some text</description>
    </metadata>
    <files>
        <file src="MyProject.targets" target="Build\"/>
        <file src="NLog.config" target="Build\" />
        <file src="bin/Release/MyProject.dll" target="lib\dotnet"/>
    </files>
    <dependencies>
        <dependency id="newtonsoft.json" version="11.0.2" />
        <dependency id="nlog" version="4.5.10" />
    </dependencies>
</package>

Затем, рядом с этими двумя, у меня есть файл .targets :

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <None Include="NLog.config">
      <Link>NLog.config</Link>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>

Я упаковываю это в пакет nuget с помощью команды dotnet pack в VSTS,давая ему путь к моему .csproj файлу.

Я пытаюсь сделать этот сложный подход, потому что я хочу, чтобы файл NLog.config автоматически включался в проекты, устанавливающие этот пакет, а также в настройкиэто свойство файла конфигурации Скопировать в выходной каталог в Скопировать всегда , подход, который принят from здесь и здесь , но который еще не работает.

В качестве примечания, я говорю то же самое поведение раньше, когда я пытался dotnet pack и давая егопуть к файлу .nuspec , но он исчез, когда я изменил путь к .csproj .

Кто-нибудь знает, почему это предупреждениепоявляется в клиентах .Net Core, использующих этот пакет, когда упаковываете его в файл .nuspec ?

Большое спасибо за ваше терпение и помощь!

1 Ответ

0 голосов
/ 19 октября 2018

Согласно https://docs.microsoft.com/en-us/nuget/create-packages/supporting-multiple-target-frameworks и https://docs.microsoft.com/en-us/nuget/reference/target-frameworks#supported-frameworks структура папок в пакете nuget, вероятно, должна быть \lib\netstandard1.6 или \lib\netstandard2.0 или любой версией, с которой вы скомпилировали (как уже пытался указать pinkfloydx33),\lib\dotnet устарела (https://docs.microsoft.com/en-us/nuget/reference/target-frameworks#deprecated-frameworks), и я не знаю, была ли уже удалена поддержка или нет.
Я не проверял это, так что вы можете попробовать это, если вы этого не сделалипока что решите.

Еще один способ добиться прогресса - проверить и сравнить фактические полученные пакеты (с nuspec и без).

...