[英]How do you add additional files to a NuGet package in Visual Studio 2017?
我最近搬到了 Visual Studio 2017 社區版。 它有兩個不錯的新功能:
您不需要在 csproj 中明確包含您的源文件。 它會自動執行此操作。
它可以直接構建 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
文件夾)。
但是,當我在另一個項目中安裝該包時,雖然內容文件列在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
)中 - 不確定哪個指令有效,但其中一個有效。
不幸的是,內容不會在編譯時自動復制到項目的輸出文件夾中 - 歡迎提出建議。
首先,請注意,您需要將文件放入 content 或 contentFiles 文件夾中,具體取決於引用 NuGet 包的方式。 請參閱本節末尾。
基本上,如果一個 NuGet 項目被 package.config 文件引用,NuGet 包內容文件夾中的文件將被復制到引用項目。 如果項目文件中的 PackageReference 引用了 NuGet 包,則將使用包內 contentFiles 文件夾中的文件。 建議兩者都包含。
contentFiles 文件夾的結構可以在這里找到。 可以為要復制的文件指定語言和框架。
所以在你的情況下:
<ItemGroup>
<Content Include="contentFiles/**/*.*">
<Pack>true</Pack>
<PackagePath>contentFiles\any\any;content</PackagePath>
</Content>
</ItemGroup>
我得到了解決方案。
下面的第一段代碼不足以復制目標應用程序上的文件
<ItemGroup>
<Content Include="contentFiles/**/*.*">
<Pack>true</Pack>
<PackagePath>contentFiles\any\any;content</PackagePath>
</Content>
解決方案-:這將復制根文件夾中的文件。
<ItemGroup>
<Content Include="contentFiles/**/*.*">
<Pack>true</Pack>
<PackagePath>contentFiles;content</PackagePath>
<IncludeInPackage>true</IncludeInPackage>
<CopyToOutput>true</CopyToOutput>
<BuildAction>Content</BuildAction>
<copyToOutput>true</copyToOutput>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<CopyToPublishDirectory>Always</CopyToPublishDirectory>
</Content>
這對我有用。 希望它對你有用。
包裝在“Content”和“IncludeInPackage”中足以將文件復制到包中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.