Dies ist derzeit nicht direkt von NuGet unterstützt. Sie können this GitHub issue für Updates folgen.
Es gibt jedoch einige Möglichkeiten, ein solches NuGet-Paket zu erstellen.
- Verwenden Sie den „Nugetizer 3000“
Dies ist ein neu entwickeltes Werkzeug NuGet Pakete von Projekten und Arbeiten durch die Installation des NuGet.Build.Packaging
nuget Paket zu erstellen. Auf der GitHub-Wiki-Seite finden Sie einige Dokumente dazu, aber da es ein sehr neues Projekt ist, gibt es noch nicht viel Dokumentation oder Community-Wissen (!) (Aber das Entwicklerteam ist sehr hilfreich, Sie könnten GitHub einreichen) Probleme, wenn Sie stecken bleiben).
- ein eigenes Ziel im Projekt (2.0.0 Werkzeuge/VS 2017 15.3+) Hinzufügen: Erstellen Sie ein Element in der csproj, dass die referenzierten Projekts Ausgabe DLL
enthalten wird
Dieser Ansatz ist sehr hacky, da er auf einem internen MSBuild-Element basiert, das von den Paketzielen verwendet wird. Es funktioniert durch die erste Markierung der <ProjectReference>
nicht aus dem erstellten nuget Paket wie folgt referenziert werden:
<ProjectReference Include="..\libA\libA.csproj" PrivateAssets="All"/>
Dann können Sie diese das erzeugte libA.dll
im nuget Paket enthalten zum Projekt hinzufügen:
<PropertyGroup>
<TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);IncludeP2PAssets</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>
<Target Name="IncludeP2PAssets">
<ItemGroup>
<BuildOutputInPackage Include="$(OutputPath)\testprivatelib.dll" />
</ItemGroup>
</Target>
Beachten Sie, dass dies erfordert, dass Sie alle <PackageReference>
Elemente des referenzierten Projekts zu dem Projekt hinzufügen, aus dem Sie das Paket generieren, da sie im generierten Paket fehlen würden, da Sie das transitive Referenzverhalten effektiv deaktiviert haben.
- eine
.nuspec
Datei benutzerdefinierte erstellen
Zum Zeitpunkt des Schreibens, ist dies wahrscheinlich die meisten „unterstützt“ Art und Weise, sondern auch das komplexeste. Mit NuGet können Sie die automatische Generierung der resultierenden Datei .nuspec
und die automatische Sammlung von Dateien deaktivieren, indem Sie die Eigenschaft <NuspecFile>
in Ihrem Projekt zusammen mit einer <NuspecProperties>
-Eigenschaft festlegen, mit der Sie Ersatztoken zum Analysieren der .nuspec
-Datei übergeben können.
Dies funktioniert durch die Projektdatei wie folgt ändern:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard1.4</TargetFramework>
<NuspecFile>$(MSBuildThisFileDirectory)$(MSBuildProjectName).nuspec</NuspecFile>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\LibB\LibB.csproj" />
</ItemGroup>
<Target Name="SetNuspecProperties" BeforeTargets="GenerateNuspec">
<PropertyGroup>
<NuspecProperties>$(NuspecProperties);id=$(AssemblyName)</NuspecProperties>
<NuspecProperties>$(NuspecProperties);config=$(Configuration)</NuspecProperties>
<NuspecProperties>$(NuspecProperties);version=$(PackageVersion)</NuspecProperties>
<NuspecProperties>$(NuspecProperties);description=$(Description)</NuspecProperties>
<NuspecProperties>$(NuspecProperties);authors=$(Authors)</NuspecProperties>
</PropertyGroup>
</Target>
</Project>
Dies wird für eine .nuspec
Datei sucht automatisch mit dem gleichen Namen wie das Projekt (somelib.csproj
=>somelib.nuspec
) und geben einige Eigenschaften zusammen zu. Die Eigenschaften werden in einem Ziel erstellt, um auf vollständig aufgelöste und vordefinierte Eigenschaften wie PackageVersion
zugreifen zu können.
Die .nuspec
Datei könnte wie folgt aussehen:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>$id$</id>
<version>$version$</version>
<authors>$authors$</authors>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>$description$</description>
<dependencies>
<group targetFramework=".NETStandard1.4">
<dependency id="NETStandard.Library" version="1.6.1" exclude="Build,Analyzers" />
</group>
</dependencies>
</metadata>
<files>
<file src="bin\$config$\netstandard1.4\*.dll" target="lib\netstandard1.4\" />
</files>
</package>
Beachten Sie, dass alle referenzierten NuGet Pakete als <dependency>
Element in der .nuspec
Datei, da diese automatisch aus den <PackageReference>
Artikeln im Projekt generiert werden, nicht mehr müssen hinzufügen Datei. Weitere Informationen finden Sie unter NuSpec Reference.
Ich habe kürzlich eine example project on GitHub demonstrating the use of a custom .nuspec
file für genau diesen Zweck erstellt.