Nuget Package CopyToOutputDirectory



  • Hallo kennt sich hier jemand aus mit nuget packages. Hoffe mal. 😀

    Ich verwende Visual Studio 2019 um ein nuget packet zu erstellen.
    Das Projekt ist eine Class Library auf Basis von .Net Framework 4.0.

    Die csproj Datei habe ich auf das "neue" Format umgestellt.

    Und sieht wie folgt aus:

    <?xml version="1.0" encoding="utf-8"?>
    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <TargetFramework>net40</TargetFramework>
        <PackageId>SomeId</PackageId>
        <Version>1.0.0.0</Version>
        <Authors>booster</Authors>
        <Company>MyCompany</Company>
        <Product>MyProduct</Product>
        <AssemblyName>MyProduct</AssemblyName>
        <RootNamespace>MyProduct</RootNamespace>
        <Description>SomePackage</Description>
      </PropertyGroup>
     
      <ItemGroup>
        <Folder Include="Properties\" />
    
        <None Include="native\**\*.*">
          <Pack>True</Pack>
          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
          <PackagePath>\lib\$(TargetFramework)</PackagePath>
        </None>
    
      </ItemGroup>
    
    </Project>
    

    Im Ordner native liegen unter anderem unmanaged c++ dlls aber auch andere Dateien mit Endung .xml und auch mit eigenen Dateiendungen.

    Diese Dateien müssen später im Output Ordner der Anwendung abgelegt werden, die das Paket verwendet.

    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    

    legt zwar nun alle Dateien im OutputOrdner des Nugetpackes Projekt ab allerdings nicht im Output Ordner des Projekts in dem das Nugetpacket verwendet wird.

    Durch Festlegen des PackagePath in mit lib und TragetFramework:

    <PackagePath>\lib\$(TargetFramework)</PackagePath>
    

    Werden zumindest alle dll's und exen in das spätere Zielverzeichnis abgelegt. Allerdings nicht die anderen Files mit Endungen wie .xml, .ddk, txt usw.

    Die Dateien werden aber zwingend im Outputverzeichnis der Anwendung benötigt. Kann mir jemand sagen wie ich das erreiche?



  • Evtl. fehlt noch ein <Link>-Eintrag, s. Add native files from NuGet package to project output directory?



  • @Th69 sagte in Nuget Package CopyToOutputDirectory:

    Evtl. fehlt noch ein <Link>-Eintrag, s. Add native files from NuGet package to project output directory?

    Hallo Th69. Danke für deine Antwort.
    Sorry das hatte ich unterschlagen. Die Seite habe ich auch bereits gefunden. Allerdings bringt das nicht den gewünschten Erfolg.

    Eigentlich werden meine native dlls ja in das output Directory der Anwendung kopiert. Nur nicht die anderen Dateien. Und .xml, .txt usw. hat ja so mal nichts mit native zu tun.

    Wenn ich

    <Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
    

    in mein csproj einfüge erhalte ich tolle kleine "link" icons in meinem Nuget Package Projekt an allen Dateien sich im Ordner native befinden. Aber das wars auch schon. 😕



  • Und die Antwort mit der separaten Datei <PackageName>.targets und dem <Target>-Eintrag?



  • @Th69 sagte in Nuget Package CopyToOutputDirectory:

    Und die Antwort mit der separaten Datei <PackageName>.targets und dem <Target>-Eintrag?

    Das habe ich noch nicht getestet. Mit dem wird es aber sehr wahrscheinlich funktionieren. Ich dachte aber es müsste doch auch ne Möglichkeit geben ohne ein seperates .target File.

    Und zusätzlich das Problem:

    However, this solution still would not copy the native binaries to the output directory of another project referencing the one which initially includes the NuGet package. You still have to reference the NuGet package in your "final" project as well.

    Das ist wie der Kommentar im Link nach der Antwort schon sagt: "This is a show stopper for me" 😞



  • @booster sagte in Nuget Package CopyToOutputDirectory:

    Mit dem wird es aber sehr wahrscheinlich funktionieren

    Ok ich nehme meine Aussage zurück. Geht auch nicht. Noch andere Ideen?



  • Sorry, ich leider nicht mehr.


Anmelden zum Antworten