我正在使用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
,还是什么?
答案 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中的content
和contentFiles
目录中。当生成的包通过ProjectReference
使用时,contentFile需要一个额外的元数据属性,以确保引用项目将其复制到构建时的输出:
<ItemGroup>
<Content Include="**\*.txt" Pack="true" PackageCopyToOutput="true" />
</ItemGroup>
此属性仅在即将推出的VS 2017 15.3更新/ .NET Core SDK 1.1 / 2.0中支持(在撰写本文时尚未发布)。