如何使用Visual Studio 2017创建Nuget包

时间:2017-06-20 15:02:02

标签: nuget visual-studio-2017

我正在使用Visual Studio 2017构建.net 4.5类库dll。

我希望打包这个dll,以及一些javascript,html,css等相关文件夹作为NuGet包。

不幸的是,我不知道从哪里开始 - 我可以找到创建NuGet包的唯一说明适用于Visual Studio 2015。我被告知NuGet已包含在Visual Studio 2017中,但如果我打开Developer Command Prompt for VS 2017并输入Nuget,则找不到该命令。

我认为Visual Studio 2017可以在.Net标准项目中构建NuGet个包,但在其他类型的项目中则不行。

我应该回到Visual Studio 2015,还是什么?

1 个答案:

答案 0 :(得分:9)

这里有几个不同的问题:

关于VS集成:在VS< 2017 NuGet通常是一个可以单独更新的扩展。在VS 2017中,扩展通过VS本身的更新紧密集成和更新。这从未包含通常用于打包和推送包的命令行nuget.exe - 此命令行客户端可从NuGet's download page获得。

打包.NET项目的“经典”方法仍然有效,并在nuget's documentation page中有记录,特别重要的是"Creating the .nuspec file … from a Visual Studio project"部分。

VS 2017还引入了一种新型项目,它使用从.NET Core工具发展而来的“.NET Sdk”。这些项目与NuGet集成,可以由VS打包,也可以直接从MSBuild / dotnet pack打包。此项目类型还可用于创建.NET Framework NuGet包。但是,VS中没有模板,因为某些可用于经典.NET项目的功能未实现(例如,设计者用于xaml,edmx)。但是对于大多数逻辑库,您可以创建.NET Standard项目并编辑csproj文件以进行更改

<TargetFramework>netstandard1.6</TargetFramework>

<TargetFramework>net461</TargetFramework>

所以该项目将针对.NET 4.6.1(其他版本可能)。该项目将具有与.NET Standard和.NET Core项目相同的集成打包功能。您可以按照指南"Create .NET Standard Packages with Visual Studio 2017"进行操作,但在创建后对项目文件执行该更改。

要将项目包含到包中,您可以使用以下元数据:

<ItemGroup>
  <Content Include="**\*.txt" Pack="true" />
</ItemGroup>

这会将文件放入生成的nuget中的contentcontentFiles目录中。当生成的包通过ProjectReference使用时,contentFile需要一个额外的元数据属性,以确保引用项目将其复制到构建时的输出:

<ItemGroup>
  <Content Include="**\*.txt" Pack="true" PackageCopyToOutput="true" />
</ItemGroup>

此属性仅在即将推出的VS 2017 15.3更新/ .NET Core SDK 1.1 / 2.0中支持(在撰写本文时尚未发布)。