Автоматически добавлять метаданные зависимости проекта в созданный вручную файл NUSPEC

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

Учитывая следующий созданный вручную пример файла NUSPEC:

<?xml version="1.0"?>
<package>
<metadata>
    <id>Web.MyApp</id>
    <version>1.0</version>
    <title>Web.MyApp</title>
    <authors>Chris</authors>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Nuget package containing files for Web.MyApp</description>
    <releaseNotes>release notes</releaseNotes>
    <copyright>Copyright Chris 2017</copyright>
    <tags />
    <dependencies />
</metadata>
<files>
    <file src="bin\**\*.*" target="bin" />
    <file src="views\**\*.*" target="views" />
    <file src="content\" target="content" />
    <file src="scripts\" target="scripts" />
    <file src="Global.asax" target="" />
    <file src="*.config" target="" />
</files>
</package>

Это позволяет мне указывать настраиваемые места распаковки для бункера, содержимого, папок спринта и т. Д., Но я хочу, чтобы метаданные зависимости проекта поддерживались автоматически. Я не хочу редактировать nupsec каждый раз, когда упоминается новая зависимость.

В качестве попытки решить эту проблему я попытался упаковать файл csproj вместо файла nuspec. Это сохранило метаданные зависимости, однако значительно усложнило определение местоположения распаковки контента. Я могу сделать следующее:

<Content Include="Content\dist\images\brand-logo.svg">
  <Pack>true</Pack>
  <PackagePath>Content\Content\dist</PackagePath>
</Content>

Но я не смог найти элегантного решения для папки bin. Я просто чувствую, что делаю что-то в корне неправильно.

Итак, мой вопрос: как я могу автоматически поддерживать метаданные зависимостей проекта при создании пакета nuget из вручную созданного файла nuspec?

Я использую команду pack:

..\tools\nuget\nuget.exe pack $project + ".nuspec" -IncludeReferencedProjects -    
Properties Configuration=Release -Verbosity quiet -NonInteractive - 
OutputDirectory "$packagedirectory" -Version $buildVersion -Symbols

person Chris White    schedule 08.06.2018    source источник


Ответы (1)


Автоматически добавлять метаданные зависимости проекта в созданный вручную файл NUSPEC

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

Когда вы включаете файлы, на которые есть ссылки, с подстановочными знаками, они будут содержать новые добавленные ссылки на проекты:

<file src="bin\**\*.*" target="bin" />

Добавьте в проект новую ссылку на проект, затем заново скомпилируйте проект, файл dll указанного проекта будет скопирован в папку \bin, поэтому нам просто нужно повторно упаковать файл .nuspec, метаданные указанного проекта будут включены в новый созданный пакет.

Например, добавьте Atest эталонный проект в Web.MyApp проект, затем перестройте проект и повторно упакуйте файл .nuspec:

введите описание изображения здесь

Если я вас неправильно понял, дайте мне знать бесплатно.

person Leo Liu-MSFT    schedule 11.06.2018
comment
Я думаю, вы немного неправильно поняли. Поле «Зависимости:» в метаданных пакета пусто (без зависимостей), но мне это не нужно. Я хочу, чтобы метаданные зависимостей заполнялись / обновлялись автоматически. - person Chris White; 11.06.2018
comment
@ChrisWhite, спасибо за ответ. Вы хотите, чтобы указанный проект заполнялся / обновлялся автоматически в узле ‹dependencies› в файле .nuspec, например: <dependencies> <dependency id="YourReferenceProjectName" version="1.0" /> </dependencies>, Я прав? - person Leo Liu-MSFT; 11.06.2018
comment
Не только зависимости проекта, например: <dependencies><dependency id="Microsoft.AspNet.Mvc" version="5.2.6" /><dependency id="Newtonsoft.Json" version="11.0.2" /><dependency id="SimpleInjector.Integration.Web.Mvc" version="4.3.0" /><dependency id="WebGrease" version="1.6.0" /></dependencies> Вместо того, чтобы вручную обновлять .nuspec файл каждый раз, когда я добавляю новую стороннюю библиотеку, я бы хотел, чтобы это происходило автоматически. - person Chris White; 11.06.2018
comment
@ChrisWhite, Понятно, я проверю, смогу ли я этого добиться, и дам вам знать как можно скорее. - person Leo Liu-MSFT; 11.06.2018
comment
@ChrisWhite, После долгого расследования, боюсь, вам придется вручную обновлять зависимости в файле .nuspec, так как упаковка файла .csproj не лучший вариант для вас. Или вы можете упаковать файл .csproj, затем открыть пакет с помощью nuget package exlporer, отредактировать пакет nuget для папки bin. - person Leo Liu-MSFT; 11.06.2018
comment
Хорошо, большое спасибо за уделенное время. Я не пробовал использовать Nuget Package Explorer, я попробую. Спасибо. - person Chris White; 11.06.2018