2017-06-12 29 views
10

最近、私はVisual Studio 2017 Community Editionに移動しました。これは、2つの素敵な新機能Visual StudioでNugetパッケージにファイルを追加する方法2017

  1. を持っていますが、明示的csprojにソースファイルを含める必要はありません、それ は、それが直接nugetパッケージを構築することができます
  2. 、これを自動的に行います。

オープンソースCodeFirstWebFramework DLLをナゲットパッケージとしてパッケージ化したいと考えています。 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ファイルが2ヶ所、contentフォルダ、およびcontentFilesフォルダ内(contentFilesフォルダインサイダーそれの内容を持っている。

ただし、別のプロジェクトにパッケージをインストールすると、コンテンツファイルはobjフォルダのproject.assets.jsonファイルに記載されていますが、表示されません。

+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を追加してOutput Dirをビルドしたか、それとも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が今成功しNuGetパッケージをダウンロードし、任意のプロジェクトに同じ名前(すなわちcontentFiles)のフォルダにコピーされますどのディレクティブがうまくいったのかは分かりませんが、そのうちの1つがしました。

コンテンツはコンパイル時にプロジェクトの出力フォルダに自動的にコピーされませんが、残念ながら - 提案は歓迎します。

1

"Content"と "IncludeInPackage"の折り返しは、ファイルをパッケージにコピーするのに十分です。

関連する問題