2017-06-12 32 views
10

Niedawno przeniosłem się do Visual Studio 2017 Edycji Społeczności. Posiada 2 ładne nowe funkcjeJak dodać dodatkowe pliki do pakietu Nuget w Visual Studio 2017

  1. Nie trzeba jawnie zawierać pliki źródłowe w csproj, to robi to automatycznie,
  2. może budować bezpośrednio pakiety Nuget.

Chcę spakować moją bibliotekę Open Source CodeFirstWebFramework jako pakiet nuget. Oprócz tego, że zawiera pakiet DLL, pakiet musi zawierać całe drzewo katalogów innych plików (w tym pliki .js, .tmpl, .css i .md).

Jak mogę powiedzieć, że to drzewo katalogów jest zawarte w pakiecie?

Z informacji, które znalazłem z obszernym wyszukiwaniem i ignorowaniem wszystkich nieaktualnych informacji, które wymagają dodania plików do csproj, wszystko, co mogłem znaleźć, to umieszczenie ich w folderze contentFiles, ale to nie wydaje się działać .

Mój plik projektu wygląda następująco:

<Project Sdk="Microsoft.NET.Sdk"> 

    <PropertyGroup> 
    <TargetFramework>net45</TargetFramework> 
    <GeneratePackageOnBuild>True</GeneratePackageOnBuild> 
    <Authors>Nikki Locke</Authors> 
    <Company>Trumphurst Ltd</Company> 
    <Description>Easy to use web server for building web apps that use sql databases generated from c# classes</Description> 
    <Copyright>2017 Trumphurst Ltd.</Copyright> 
    <PackageProjectUrl>https://github.com/nikkilocke/CodeFirstWebFramework</PackageProjectUrl> 
    <RepositoryUrl>https://github.com/nikkilocke/CodeFirstWebFramework</RepositoryUrl> 
    <RepositoryType>Github</RepositoryType> 
    <PackageTags>C# SQL Code First Web Server</PackageTags> 
    </PropertyGroup> 

    <ItemGroup> 
    <PackageReference Include="Markdig" Version="0.12.1" /> 
    <PackageReference Include="Mono.Data.Sqlite.Portable" Version="1.0.3.5" /> 
    <PackageReference Include="mustache-sharp" Version="0.2.10" /> 
    <PackageReference Include="MySql.Data" Version="6.9.9" /> 
    <PackageReference Include="Newtonsoft.Json" Version="10.0.2" /> 
    </ItemGroup> 

    <ItemGroup> 
    <Reference Include="System.Net" /> 
    <Reference Include="System.Web" /> 
    </ItemGroup> 

</Project> 

Wildly zgadywania, co może muszę zrobić ze sprzecznych i out-of-aktualne informacje w sieci, dodałem następujące:

<ItemGroup> 
    <Content Include="contentFiles/**/*.*" copyToOutput="true"> 
     <IncludeInPackage>true</IncludeInPackage> 
    </Content> 
    </ItemGroup> 

teraz plik .nupkg ma zawartość poufnych nim contentFiles folderu (w dwóch miejscach, folder content i folder contentFiles.

Jednak po zainstalowaniu pakietu w innym projekcie pliki zawartości nie są wyświetlane, mimo że są wymienione w pliku project.assets.json w folderze obj.

+1

* nie musisz jawnie dołączać plików źródłowych do csproj, robi to automatycznie i może budować pakiety nugetów bezpośrednio * - gdzie to przeczytałeś? Ten dokument (jest to przykład z rdzeniem .net, który nie jest pewny, czy kierujesz pełną ofertę) ma kilka kroków: https://docs.microsoft.com/en-us/nuget/guides/create-net-standard-packages-vs2017 dodałeś bibliotekę DLL, aby projektować i budować katalog wyjściowy, czy jest to odniesienie w csproj? –

+0

np. http://www.natemcmaster.com/blog/2017/03/09/vs2015-to-vs2017-upgrade/ –

+0

"czy dodałeś bibliotekę DLL do projektu i kompilacji katalogu wyjściowego, czy jest to odniesienie w csproj?" - nie rozumiem pytania. Co to jest dll? –

Odpowiedz

3

Mam teraz zmienił znowu mój plik projektu, tak teraz brzmi:

<Project Sdk="Microsoft.NET.Sdk"> 

    <PropertyGroup> 
    <TargetFramework>net45</TargetFramework> 
    <GeneratePackageOnBuild>True</GeneratePackageOnBuild> 
    <Authors>Nikki Locke</Authors> 
    <Company>Trumphurst Ltd</Company> 
    <Description>Easy to use web server for building web apps that use sql databases generated from c# classes</Description> 
    <Copyright>2017 Trumphurst Ltd.</Copyright> 
    <PackageProjectUrl>https://github.com/nikkilocke/CodeFirstWebFramework</PackageProjectUrl> 
    <RepositoryUrl>https://github.com/nikkilocke/CodeFirstWebFramework</RepositoryUrl> 
    <RepositoryType>Github</RepositoryType> 
    <PackageTags>C# SQL Code First Web Server</PackageTags> 
    </PropertyGroup> 

    <ItemGroup> 
    <PackageReference Include="Markdig" Version="0.12.1" /> 
    <PackageReference Include="Mono.Data.Sqlite.Portable" Version="1.0.3.5" /> 
    <PackageReference Include="mustache-sharp" Version="0.2.10" /> 
    <PackageReference Include="MySql.Data" Version="6.9.9" /> 
    <PackageReference Include="Newtonsoft.Json" Version="10.0.2" /> 
    </ItemGroup> 

    <ItemGroup> 
    <Reference Include="System.Net" /> 
    <Reference Include="System.Web" /> 
    </ItemGroup> 

    <ItemGroup> 
    <Content Include="contentFiles/**/*.*" copyToOutput="true"> 
     <IncludeInPackage>true</IncludeInPackage> 
     <CopyToOutput>true</CopyToOutput> 
     <BuildAction>Content</BuildAction> 
     <copyToOutput>true</copyToOutput> 
     <CopyToOutputDirectory>Always</CopyToOutputDirectory> 
    </Content> 
    </ItemGroup> 

    <ItemGroup> 
    <Compile Remove="Phone\**" /> 
    <EmbeddedResource Remove="Phone\**" /> 
    <None Remove="Phone\**" /> 
    </ItemGroup> 

</Project> 

W contentFiles obecnie pomyślnie skopiowane do folderu o tej samej nazwie (tj contentFiles) w każdym projekcie, który pobiera pakiet Nuget - nie wiem, która dyrektywa działała, ale jedna z nich to zrobiła.

Zawartość nie jest automatycznie kopiowana do folderu wyjściowego projektu podczas kompilacji, niestety - sugestie są mile widziane.

1

Zawijanie w "treści" i "IncludeInPackage" jest wystarczająco dobre, aby skopiować plik (i) do paczki.