содержимое nuget / файлы содержимого дублируются во вложенном пакете nuget - PullRequest
0 голосов
/ 15 января 2020

У меня есть 3 проекта, которые вложены друг в друга.

  1. HtAlarms.Common

    • Имеет файл конфигурации HtAlarms.config
    • Из этого создается пакет nuget: HtAlarms.Common.nuget
  2. HtOpc.Alarms

    • Содержит пакет HtAlarms.Common.nuget
    • Из этого создается пакет nuget: HtOpc.Alarms.nuget
      • HtAlarms.config ошибочно включен в пакет nuget!
  3. HtServer.ServerTemplate
    • Содержит пакет HtOpc.Alarms.nuget

      - HtAlarms.config ошибочно включен в каталог root!

HtAlarms.Common имеет следующую структуру каталогов:

+-- Config
|   +-- NLog
|   |   +-- HtAlarms.config

enter image description here

enter image description here

HtAlarms.Common.csproj

...
  <ItemGroup>
    <Content Include="Config\NLog\HtAlarms.config">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
...

HtOPC.Alarms имеет следующую структуру каталогов:

+-- Config
|   +-- NLog
|   |   +-- HtAlarms.config

enter image description here

enter image description here

HtOPC.Alarms.csproj

...
  <ItemGroup>
    <PackageReference Include="HtAlarms.Common" Version="6.0.0-fix-htalarms-config.68" />
  </ItemGroup>
...

Но в пакете nuget уже есть дубликат!?

enter image description here


HtServer.ServerTemplate имеет следующую структуру каталогов:

+-- Config
|   +-- NLog
|   |   +-- HtAlarms.config
+-- HtAlarms.config

enter image description here

enter image description here

HtAlarms.Common.nuget устанавливает Config/NLog/HtAlarms.config - вправо

HtOPC.Alarms.nuget устанавливает HtAlarms.config - неверно

Также CopyToOutputDirectory равно false. Должно быть true.

Кто-то может сказать мне, что здесь не так? Спасибо !!

1 Ответ

1 голос
/ 16 января 2020

Кто-то может сказать мне, что здесь не так? Спасибо !!

Насколько я знаю, в Net стандартных проектах ( новый формат sdk проектов и когда он упакован, он может только быть установлен в формате PackageReference ), когда вы изменяете Build Action файла на Content и затем нажимаете Pack , nuget поместит эти файлы в папку ContentFiles в пакете nuget папка (HtAlarms.Commonxxxxx.nupkg).

При установке этого пакета в новый проект эти файлы из папки ContentFiles будут автоматически скопированы в новый проект.

И это связано с Build Action вместо CopyToOutputDirectory.

Получив дополнительную информацию, вы не хотите, чтобы этот файл появлялся во втором пакете nuget HtOpc.Alarms, и я предлагаю вам попробовать это:

Решение

1) сначала измените Build Action файла HtAlarms.config в проекте HtAlarms.Common на None, а затем введите HtAlarms.Common.csproj файл для добавления <pack>true</pack> под пунктом HtAlarms.config.

enter image description here

enter image description here

* 105 2 * затем нажмите pack и перепакуйте ваш проект с именем HtAlarms.Common.nuget.

2) , затем введите второй проект HtOpc.Alarms, сначала удалите старый пакет nuget HtAlarms.Common.nuget. Во-вторых, очистите кэш Nuget перед установкой нового пакета Nuget HtAlarms.Common.nuget в HtOpc.Alarms проект. Это важно в случае, если вы установили неправильную версию nuget. Этот шаг не добавляет <pack>true</pack> в HtOpc.Alarms.csproj, и вы можете напрямую упаковать этот новый проект HtOpc.Alarms.nuget.

3) Для третьего проекта вы можете попробовать выполнить тот же шаг, как второй шаг для установки HtOpc.Alarms.nuget в HtServer.ServerTemplate проекте.

Обновление 1

После тестирования я обнаружил, когда я устанавливаю пакет nuget в новый проект, Copy to Output Directory нового импортированного файла HtAlarms.config по умолчанию установлено на Never. И я думаю, что это эффект кнопки «упаковать» и использовать файл по умолчанию xxxx.nuspec для упаковки вашего проекта, и когда вы используете файл xxx.nuspec, он игнорирует Copy to Output Directory файла.

Поэтому, когда вы упаковываете пакет nuget HtAlarms.Common.nuget, откройте его, а затем добавьте copyToOutput="true" в файл HtAlarms.Common.nuspec (используйте zip-инструмент, чтобы открыть HtAlarms.Common.1.0.0.0.nupkg)

enter image description here

1) добавить этот узел в файл HtAlarms.Common.nuspec

copyToOutput="true"

enter image description here

Кроме того, сохраните эту операцию, очистите кэш Nuget, а затем заново установите HtAlarms.Common.nuget в проект HtOpc.Alarms.

Обновление 2

Поскольку вы Я не могу изменить ваш пакет nuget позже, я думаю, вы используете nuget.exe cli , чтобы упаковать ваш проект с файлом xxxx.nuspec вместо использования кнопки Pack .

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

1) при упаковке проекта не используйте Pack , откройте CMD, сначала введите путь, по которому существует HtAlarms.Common.csproj (например, cd xxxxxxxx\HtAlarms.Common ).

enter image description here

enter image description here

2) тип nuget spe c для генерации файла описания пакета HtAlarms.Common.nuspec. В этом файле вы можете назвать идентификатор пакета, версию, автора, описание и т. Д. Так, как хотите для упаковки пакета.

Например, вот так:

Не забудьте добавить contentfiles узлов и files узлов в него:

  <?xml version="1.0"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>$author$</authors>
    <owners>$author$</owners>
    <licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl>
    <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl>
    <iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>1</description>
    <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
    <copyright>Copyright 2020</copyright>
    <tags>Tag1 Tag2</tags>

 <contentFiles>
      <files include="Config\NLog\HtAlarms.config" buildAction="None" copyToOutput="true" flatten="true" />
    </contentFiles>
  </metadata>
<files>
<file src="Config\NLog\HtAlarms.config" target="ContentFiles\any\Config\NLog" />
<file src="Config\NLog\HtAlarms.config" target="Content\Config\NLog" />
</files>
</package>

3) Перед тем, как вводить nuget pack HtAlarms.Common.csproj в CMD для генерации нового пакета nuget HtAlarms.Common.nuget, вы должны перестроить свой проект .

Когда вы переустанавливаете его в другой проект, не забудьте сначала очистить кеш nuget.

Затем вы также можете использовать этот формат пакета nuget для HtOpc.Alarms проекта.

enter image description here

После этого вы можете установить этот пакет nuget непосредственно в проект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...