2017-06-12 185 views
10

我最近搬到Visual Studio 2017社區版增加額外的文件到NuGet包。它有2個不錯的新功能你如何在Visual Studio 2017年

  1. 你並不需要明確包括在的csproj源文件,它 自動執行此操作,
  2. 它可以直接建立的NuGet包。

我想將我的開放源碼CodeFirstWebFramework DLL打包爲nuget包。除了包含DLL之外,軟件包還必須包含其他文件(包括.js,.tmpl,.css和.md文件)的整個目錄樹。

我如何告訴Visual Studio,我想包中包含該目錄樹?

從我發現哪些信息與廣泛的搜索,並忽略所有過時的信息,涉及到文件添加到csproj,我能找到的所有信息是將它們放在一個contentFiles文件夾中,但這似乎不工作。

我的項目文件看起來像這樣:

<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> 

狂亂猜測我可能需要從衝突做,出過期的網絡上的信息,我已經添加了以下內容:

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

.nupkg文件具有contentFiles文件夾內幕它的內容(在兩個地方,一個content文件夾和文件夾contentFiles

然而,當我在另一個項目中安裝包,內容文件不會出現,儘管它們在project.assets.json文件中obj文件夾中列出。

+1

*您並不需要明確包括在的csproj源文件,它自動執行此操作,並且可以直接建立的NuGet包* - 你在哪裏讀的?這個doco(這是一個.NET核心的例子,不知道你的目標是否完整)有幾個步驟https://docs.microsoft.com/en-us/nuget/guides/create-net-standard-packages-vs2017有您添加了DLL到項目和生成輸出目錄或是在csproj中引用? –

+0

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

+0

「您是否已經將DLL添加到項目和生成輸出目錄中,還是在csproj中引用?」 - 不明白這個問題。什麼DLL? –

回答

3

我現在又改變了我的項目文件,所以它現在讀取:

<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> 

的contentFiles現在成功地複製到相同名稱的文件夾(即contentFiles)在下載NuGet包的任何項目 - 不確定哪個指令有效,但其中有一個是。

內容不會自動複製到編譯項目的輸出文件夾,遺憾的是 - 建議表示歡迎。

1

包裝在「內容」和「IncludeInPackage」是不夠好,文件(縣)複製到該包。