Отличия пакета NuGet в зависимости от метода сборки - PullRequest
0 голосов
/ 05 марта 2020

У меня есть. NET Базовый проект, который я хочу упаковать в виде пакета NuGet для использования в других проектах / решениях Visual Studio. В. NET Базовых проектах есть замечательная функция, в которой вы можете выбрать в свойствах проекта для создания пакета NuGet при сборке, который я пробовал. В результате получается пакет, назовем его My.Company.Package, в котором есть сгенерированный файл nuspe c, который выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
  <metadata>
    <id>My.Company.Package</id>
    <version>10.1.2</version>
    <authors>My.Company.Package</authors>
    <owners>My.Company.Package</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Package Description</description>
    <dependencies>
      <group targetFramework=".NETCoreApp3.1">
        <dependency id="Microsoft.Win32.Registry" version="4.7.0" exclude="Build,Analyzers" />
      </group>
    </dependencies>
  </metadata>
  <files>
    <file src="C:\dev\MyProduct\bin\Debug\netcoreapp3.1\My.Company.dll" target="lib\netcoreapp3.1\My.Company.dll" />
  </files>
</package>

При установке встроенного пакета в другое решение менеджер пакетов NuGet сообщает следующее:

Installing:

Microsoft.NETCore.Platforms.3.1.0
Microsoft.Win32.Registry.4.7.0
My.Company.Package.10.1.2
System.Security.AccessControl.4.7.0
System.Security.Principal.Windows.4.7.0

После установки пакет, кажется, работает нормально, я могу получить доступ к пространствам имен и классам, которые должны быть включены в пакет.

По причинам, которые я выиграл '1023 * сюда, я должен упаковать пакет сам, без этой опции. Я установил событие пост-сборки в Visual Studio, которое запускает nuget pack mycompany.nuspec, и mycompany.nuspe c выглядит так (я пытался имитировать сгенерированное):

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
  <metadata>
    <id>My.Company.Other.Package</id>
    <version>10.1.214</version>
    <authors>My Company</authors>
    <description>
    The real description.
    </description>
    <copyright>© My company</copyright>
    <tags>My company</tags>
    <dependencies>
      <group targetFramework=".NETCoreApp3.1">
        <dependency id="Microsoft.Win32.Registry" version="4.7.0" exclude="Build,Analyzers" />
      </group>
    </dependencies>
  </metadata>
  <files>
    <file src="C:\dev\MyProduct\bin\Debug\netcoreapp3.1\My.Company.dll" target="lib\netcoreapp3.1\My.Company.dll" />
  </files>
</package>

Пакет успешно построен Однако, когда я выбираю его установку во внешний проект, менеджер пакетов NuGet уведомляет меня, что он установит только этот указанный c пакет:

Installing:

My.Company.Package.10.1.2

После установки я не могу получить доступ к ожидаемому классы или пространства имен, похоже, он не включает в себя все, что нужно.

Как при первом варианте можно установить так много пакетов, которые никогда не перечислены в качестве зависимостей в файле nuspe c, и как я могу это сделать? подражать?

1 Ответ

1 голос
/ 05 марта 2020

Понятия не имею, что именно это сделало, но после очистки и перестроения решения, из которого я упаковываю, и перезапуска Visual Studio, оно заработало.

...