Как поделиться исходным кодом через пакеты nuget для использования в проектах .NET Core - PullRequest
0 голосов
/ 18 октября 2018

Я хочу сделать небольшие фрагменты исходного кода (например, вспомогательные классы) доступными для использования в проектах .NET Core (.csproj).К этому моменту я упаковал исходный код с помощью NuGet различными способами в соответствии с сообщениями в блогах и официальными документами Nuget.Я использовал файл nuspec для управления тем, где мои исходные файлы окажутся в пакете nuget, например:

<files>
    <file src="*.cs" target="content/LruCache" />
    <file src="*.cs" target="contentFiles/cs/any/LruCache" />
</files>

Я не включал файл целей msbuild или сценарий установки.

Всякий раз, когда яустановить пакет NuGet в проект .NET Core (https://docs.microsoft.com/en-us/dotnet/core/tools/csproj) Я просто ничего там не получаю. Исходные файлы не будут включены в мой проект. Я пробовал разные настройки для узла <PackageReference/> в .csproj(PrivateAssets и т. Д.), Но безуспешно.

Это вообще должно быть возможно? Если да, то как это сделать?


Справочная информация:
Причиной для этого является некая проблема с алмазом, когда у нас есть проекты B и C, использующие вспомогательный класс A, и третий проект D, использующий B и C. В этой ситуации я не хочу иметь дело с конфликтами версий сборки.когда разные (несовместимые) версии A были использованы в B и C.

1 Ответ

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

Это вообще возможно?Если так, как это должно быть сделано?

Ответ - да.Так как вы тестируете тип проекта .net core.Вы должны использовать contentFiles вместо content.content используется для packages.config.Проверьте Использование элемента contentFiles для файлов содержимого и блога NuGet ContentFiles Demystified для получения более подробной информации.

Таким образом, ваш файл .nuspec должен быть:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
  <metadata>
    <id>MyTestCore</id>
    <version>5.0.0</version>
    <authors>TestContentFile</authors>
    <owners>TestContentFile</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Package Description</description>
    <contentFiles>
      <files include="any/any/Test.cs" buildAction="content" flatten="true" copyToOutput="true"/>
    </contentFiles>
  </metadata>

  <files>
    <file src="contentFiles/any/any/Test.cs" target="contentFiles/any/any/LruCache" />
  </files>
</package>

Пакет nuget должен выглядеть следующим образом:

enter image description here

Примечание: При создании нового пакета незабыл удалить кэш nuget для этого пакета в папке C:\Users\<UserName>\.nuget\packages, в противном случае он всегда устанавливает старый пакет.

enter image description here

С помощью этого методаисходные файлы будут включены в ваш проект.

Надеюсь, это поможет.

...