Pakowanie projektów NuGet skompilowanych w trybie wydania?

109

Czy istnieje sposób na utworzenie pakietu NuGet przy użyciu kodu skompilowanego w trybie wydania? A może jest jakiś powód, dla którego powinienem publikować (w tym przypadku lokalnie) tylko pakiety skompilowane w trybie debugowania?

Za każdym razem, gdy dzwonię nuget packz katalogu projektu, w którym mam poniższy plik nuspec, w kodzie, który skompilowałem tylko w trybie wydania, narzeka, że ​​nie znalazł biblioteki DLL w folderze debugowania ( "\bin\Debug\SomeProject.dll"). Jeśli skompiluję go w trybie debugowania, te pliki tam są i pakuje je tak, jak powinno.

<?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
źródło

Odpowiedzi:

208

Możesz rozwiązać to w następujący sposób: NuGet.exe pack Foo.csproj -Prop Configuration=Release( odniesienie ).

Giorgi
źródło
10
Dla każdego, kto chce krótkiej historii z linku (chociaż dobrze przeczytać), nastąpiła zmiana z wersji 1.3 na wersję 1.4, która przechodzi z domyślnego wydania do domyślnego wyciągniętego z ustawienia projektu, które można zmodyfikować tylko w plik projektu bezpośrednio (brak opcji VS GUI). Aby uniknąć zmiany właściwości wiersza polecenia dla wszystkich przyszłych nuget packwywołań, edytuj plik XML projektu w swoim ulubionym edytorze tekstu.
patridge
4
Czy istnieje sposób na spakowanie zarówno wersji do wydania, jak i wersji do debugowania w jednym pakiecie, a następnie, aby mój projekt automatycznie używał wersji Debug w porównaniu z wersją w zależności od tego, czy jestem w konfiguracji Debug vs. Release Solution?
JD,
2
Jeśli chcesz po prostu debugować symbole dla swojego pakietu, możesz albo dołączyć swoje pliki PDB do * .nuspec (np. <file src="bin\Release\*.pdb" target="lib\net40\" />), Albo opublikować pakiet symboli obok pakietu DLL.
patridge
1
Link @Giorgi wygasł
Weipeng L
1
@JD Chcę również spakować zarówno debugowanie, jak i wydanie , i znalazłem to: stackoverflow.com/questions/37673692/ ...
Peter-Yu
16

Jeśli używasz zdarzenia po kompilacji i chcesz utworzyć pakiet, niezależnie od tego, czy używasz konfiguracji debugowania, czy wydania, możesz skonfigurować wiersz poleceń zdarzenia po kompilacji w następujący sposób:

"<path to nuget tools>\NuGet.exe" pack "$(ProjectPath)" -Prop Configuration=$(ConfigurationName)
EnderWiggin
źródło
10

Aby NuGet automatycznie używał trybu wydania podczas uruchamiania nuget pack, wykonaj następujące czynności:

  1. Otwórz .csprojplik w edytorze tekstu.
  2. Znajdź następujący wiersz:

    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    
  3. W tej linii, należy wymienić Debugz Release.
  4. Zapisz zmiany.
Sam
źródło
0

Odpowiedzi tutaj są dobre, ale miałem z tym wiele problemów w przypadku projektu .NET Standard. Miałem projekt, który zamierzał publikować tylko pliki binarne wydania, ale nie był zgodny z moją domyślną ścieżką wyjściową kompilacji.

Dodałem to do mojego CSProj, co umożliwiło mi użycie tutaj zaakceptowanej odpowiedzi .

<PropertyGroup Condition="'$(Configuration)' == 'Release'">
      <OutputPath>$(SolutionDir)bin\$(PlatformTarget)\Release</OutputPath>
</PropertyGroup>
kayleeFrye_onDeck
źródło