最近、Visual Studio 2017
Community Editionに移動しました。 2つの素晴らしい新機能があります
オープンソース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>
Web上の競合する情報や古い情報から何をする必要があるかを大まかに推測して、以下を追加しました。
<ItemGroup>
<Content Include="contentFiles/**/*.*" copyToOutput="true">
<IncludeInPackage>true</IncludeInPackage>
</Content>
</ItemGroup>
これで、.nupkg
ファイルにはcontentFiles
フォルダーの内容が含まれています(2つの場所、content
フォルダーとcontentFiles
フォルダー)。
ただし、パッケージを別のプロジェクトにインストールすると、コンテンツファイルは表示されませんが、obj
フォルダーのproject.assets.json
ファイルにリストされます。
プロジェクトファイルを再度変更したため、次のようになりました。
<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つはしました。
残念ながら、コンテンツはコンパイル時にプロジェクトの出力フォルダーに自動的にコピーされません-提案を歓迎します。
最初に、nugetパッケージの参照方法に応じて、ファイルをcontentフォルダーまたはcontentFilesフォルダーに配置する必要があることに注意してください。この最後を参照してください セクション 。
基本的に、nugetプロジェクトがpackage.configファイルによって参照される場合、nugetパッケージのコンテンツフォルダーからのファイルは、参照元プロジェクトにコピーされます。 nugetパッケージがプロジェクトファイルのPackageReferenceによって参照されている場合、パッケージ内のcontentFilesフォルダーのファイルが使用されます。両方を含めることをお勧めします。
ContentFilesフォルダーの構造は here にあります。コピーするファイルの言語とフレームワークを指定することができます。
あなたの場合:
<ItemGroup>
<Content Include="contentFiles/**/*.*">
<Pack>true</Pack>
<PackagePath>contentFiles\any\any;content</PackagePath>
</Content>
</ItemGroup>
「Content」と「IncludeInPackage」でラップするだけで、ファイルをパッケージにコピーできます。