Упаковка проектов NuGet, скомпилированных в режиме выпуска?

109

Есть ли способ создать пакет NuGet с использованием кода, скомпилированного в режиме выпуска? Или по какой-то причине я должен публиковать (в данном случае сделать доступным локально) только пакеты, скомпилированные в режиме отладки?

Каждый раз, когда я вызываю nuget packиз своего каталога проекта, где у меня есть файл nuspec ниже, код, который я скомпилировал только в режиме выпуска, жалуется, что не нашел DLL в папке отладки ( "\bin\Debug\SomeProject.dll"). Если я скомпилирую его в режиме отладки, эти файлы будут там, и он упакует их должным образом.

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <id>$id$</id>
        <version>$version$</version>
        <authors>$author$</authors>
        <owners>$author$</owners>
        <iconUrl>http://somewhere/project.png</iconUrl>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>$description$</description>
    </metadata>
</package>
Патридж
источник

Ответы:

208

Решить можно так: NuGet.exe pack Foo.csproj -Prop Configuration=Release( ссылка ).

Георгий
источник
10
Для тех, кому нужен рассказ по ссылке (хотя и неплохо читается), было изменение с версии 1.3 на версию 1.4, которая переходит со значения по умолчанию Release на значение по умолчанию, полученное из параметров проекта, которые можно изменить только в файл проекта напрямую (без опции VS GUI). Чтобы избежать изменения свойств командной строки для всех будущих nuget packвызовов, отредактируйте XML-файл проекта в своем любимом текстовом редакторе.
Patridge
4
Есть ли способ упаковать как версию Release, так и версию Debug в один пакет, а затем сделать так, чтобы мой проект автоматически использовал версию Debug вместо версии Release в зависимости от того, нахожусь ли я в конфигурации Debug vs. Release Solution?
JD
2
Если вам просто нужны отладочные символы для вашего пакета, вы можете либо включить свои файлы PDB в * .nuspec (например, <file src="bin\Release\*.pdb" target="lib\net40\" />), либо опубликовать пакет символов вместе с пакетом DLL.
Patridge
1
Срок действия ссылки @Giorgi истек
Weipeng L 01
1
@JD Я также хочу упаковать как Debug, так и Release ,, и я нашел это: stackoverflow.com/questions/37673692/…
Peter-Yu
16

Если вы используете событие после сборки и хотите создать пакет, независимо от того, используете ли вы конфигурацию Debug или Release, вы можете настроить командную строку события после сборки следующим образом:

"<path to nuget tools>\NuGet.exe" pack "$(ProjectPath)" -Prop Configuration=$(ConfigurationName)
ЭндерВиггин
источник
10

Чтобы NuGet автоматически использовал режим выпуска при запуске nuget pack, выполните следующие действия:

  1. Откройте ваш .csprojфайл в текстовом редакторе.
  2. Найдите следующую строку:

    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    
  3. В этой строке заменить Debugна Release.
  4. Сохранить изменения.
Сэм
источник
0

Ответы здесь хорошие, но у меня было много проблем с этим для проекта .NET Standard. У меня был проект, который собирался публиковать только двоичные файлы Release, но он не соблюдал мой путь вывода сборки по умолчанию.

Я добавил это к моему CSProj , который затем позволил мне использовать принятый ответ здесь .

<PropertyGroup Condition="'$(Configuration)' == 'Release'">
      <OutputPath>$(SolutionDir)bin\$(PlatformTarget)\Release</OutputPath>
</PropertyGroup>
kayleeFrye_onDeck
источник