Pacotes de projetos NuGet compilados em modo de lançamento?

109

Existe alguma maneira de fazer um pacote NuGet usando o código compilado no modo de lançamento? Ou há algum motivo para eu só publicar (disponibilizar localmente, neste caso) pacotes compilados no modo de depuração?

Toda vez que eu chamo nuget packdo diretório do meu projeto, onde tenho o arquivo nuspec abaixo, no código que apenas compilei no modo de lançamento, ele reclama por não encontrar a DLL na pasta de depuração ( "\bin\Debug\SomeProject.dll"). Se eu compilá-lo em modo de depuração, esses arquivos estarão lá e serão empacotados como deveriam.

<?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>
patridge
fonte

Respostas:

207

Você pode resolver assim: NuGet.exe pack Foo.csproj -Prop Configuration=Release( a referência ).

Giorgi
fonte
10
Para quem quiser o conto do link (boa leitura, no entanto), houve uma mudança de v1.3 para v1.4 que vai de um padrão de lançamento para um padrão puxado de uma configuração de projeto que só pode ser modificada em o arquivo de projeto diretamente (sem opção do VS GUI). Para evitar o ajuste da propriedade da linha de comando para todas as nuget packchamadas futuras , edite o arquivo de projeto XML em seu editor de texto favorito.
patridge
4
Existe uma maneira de empacotar uma versão de lançamento e de depuração em um pacote e, em seguida, fazer meu projeto usar automaticamente a versão de depuração em relação à versão, dependendo se estou na configuração de depuração versus solução de liberação?
JD
2
Se você simplesmente deseja símbolos de depuração para seu pacote, pode incluir seus arquivos PDB no * .nuspec (por exemplo, <file src="bin\Release\*.pdb" target="lib\net40\" />) ou publicar um pacote de símbolos junto com seu pacote DLL.
patridge
1
@Giorgi link expirou
Weipeng L
1
@JD Eu também quero empacotar Debug e Release, e eu encontrei isto: stackoverflow.com/questions/37673692/…
Peter-Yu
16

Se você estiver usando um evento pós-compilação e quiser criar um pacote, seja usando a configuração Debug ou Release, você pode configurar a linha de comando do evento pós-compilação da seguinte maneira:

"<path to nuget tools>\NuGet.exe" pack "$(ProjectPath)" -Prop Configuration=$(ConfigurationName)
EnderWiggin
fonte
10

Para que o NuGet use automaticamente o modo Release ao executar nuget pack, faça o seguinte:

  1. Abra seu .csprojarquivo em um editor de texto.
  2. Encontre a seguinte linha:

    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    
  3. Nesta linha, substitua Debugpor Release.
  4. Salve as alterações.
Sam
fonte
0

As respostas aqui são boas, mas eu estava tendo muitos problemas com isso para um projeto .NET Standard. Eu tinha um projeto que iria publicar apenas binários de lançamento, mas não estava respeitando meu caminho de saída de compilação padrão.

Eu adicionei isso ao meu CSProj, o que me permitiu usar a resposta aceita aqui .

<PropertyGroup Condition="'$(Configuration)' == 'Release'">
      <OutputPath>$(SolutionDir)bin\$(PlatformTarget)\Release</OutputPath>
</PropertyGroup>
kayleeFrye_onDeck
fonte