Команда dotnet pack вместе с файлом nuspec, не включая DLL проекта - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть проект .NET Standard 2.0 под названием ProjectName.Logging с файлом ProjectName.Logging.nuspec.

На этот файл ссылаются в .csproj моего проекта

<PropertyGroup>
  <TargetFramework>netstandard2.0</TargetFramework>
  <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
  <NuspecFile>ProjectName.Logging.nuspec</NuspecFile>  
</PropertyGroup>

Вот мой .nuspec

<?xml version="1.0"?>
<package >
    <metadata>
        <id>ProjectName.Logging</id>
        <version>1.2.1</version>
        <authors>Jérôme MEVEL</authors>
        <description>Just a logging component</description>
        <dependencies>
            <dependency id="Dapper" version="1.50.5" />
            <dependency id="Another.Project" version="1.1.1" />
            <dependency id="Microsoft.Extensions.DependencyInjection" version="2.1.1" />
            <dependency id="Microsoft.Extensions.Logging" version="2.1.1" />
            <dependency id="Microsoft.Extensions.Logging.Abstractions" version="2.1.1" />
            <dependency id="NLog" version="4.5.8" />
            <dependency id="NLog.Extensions.Logging" version="1.2.1" />
            <dependency id="NLog.Web.AspNetCore" version="4.6.0" />
            <dependency id="System.Data.SqlClient" version="4.5.1" />
        </dependencies>
    </metadata>
    <files>
        <file src="bin\Release\netstandard2.0\ProjectName.Logging.dll" target="lib/netstandard2.0/ESHCloud.Logging.dll" />
        <file src="ProjectName.Logging.targets" target="build/ProjectName.Logging.targets" />
        <file src="NLog/Nlog.config" target="content/Nlog.config" />
    </files>
</package>

Как видите, я вручную включаю файл ProjectName.Logging.dll, и мне даже нужно включить Release, потому что использование переменной MsBuild $(Configuration) не работает в моем файле .nuspec.

Я упаковываю проект, выполняя эту команду в каталоге моего проекта

dotnet pack --output C:/Nuget --force

и если я удаляю элемент <files> из моего .nuspec при выполнении команды dotnet pack, мой сгенерированный пакет Nuget будет полностью пустым.

С другой стороны, если я запускаю команду dotnet pack без файла .nuspec, абсолютно все в моем проекте будет включено в пакет Nuget.

Так в чем же дело с командой dotnet pack? Я не понимаю, что я делаю не так.

Как включить DLL моего проекта в пакет Nuget без указания конфигурации (Debug или Release)?

И последнее: Я не хочу использовать команду nuget pack .

Я достаточно поиграл с Nuget на наших серверах VSTS (недавно переименован в Azure DevOps ), и у меня нет полного контроля над этими серверами сборки (у моего менеджера есть, но он кажется слишком занятым, чтобы заботиться об этом) .

Итак, подведем итог, nuget pack для меня не . Я хочу использовать dotnet pack вместе с .nuspec файлом.

Спасибо

1 Ответ

0 голосов
/ 13 сентября 2018

Чтобы добавить свою DLL без указания конфигурации, используйте шаблон глобуса:

<file src="runtimes\**" target="runtimes/"/>

Если вы используете nuget.exe, вы можете использовать маркер замены :

<file src="bin\$configuration$\netstandard2.0\*.dll" target="lib\netstandard2.0\"/>

Если вам действительно нужно использовать файл nuspec, лучше использовать nuget.exe.Если вы не хотите использовать nuget.exe, отпустите nuspec.Я проделал изрядную сумму работы с dotnet и nupkgs за последние несколько недель, и смешивание nuspec с файлами проекта - это просто.

Вы можете поместить большинство метаданных nupkg непосредственно в csproj:

<PropertyGroup>
  <PackageId>Subor.nng.NETCore</PackageId>
  <PackageVersion>0.0.2</PackageVersion>
  <Authors>Subor</Authors>
  ...
</PropertyGroup>

Это рекомендуемый подход при использовании dotnet CLI . Аналогично для msbuild с форматом PackageReference.

Вот пример проекта , над которым я работал.dotnet pack создает пакет bin/Debug/ и dotnet pack --configuration Release создает этот пакет nuget.org .

Все в проекте не должно копироваться в nupkg.В Visual Studio проверьте Свойства файлов и убедитесь, что все не помечено как "Содержимое" и т. Д. Также проверьте файлы проекта, чтобы увидеть, добавляются ли файлы, которыене должно бытьИщите (мисс) использование <PackagePath> и <IsPackable>.

Не зная подробностей вашего проекта, я упомяну попытку использования некоторых из аргументов для dotnet pack.

...