完整的 .Net Framework 是否支持 msbuild /t:Pack?

4
根据文档https://learn.microsoft.com/en-us/nuget/schema/msbuild-targets,似乎msbuild现在支持2个特定的NuGet目标:PackRestore。我已经成功使用了Restore,但无法使用Pack

错误 MSB4057:项目中不存在目标“Pack”。

这是传统的.Net项目支持还是仅限于.Net Core?我没有找到任何明确说明的文档。
关于所需的依赖项,我正在使用
PM> nuget help
NuGet Version: 4.1.0.2450
usage: NuGet <command> [args] [options] 
Type 'NuGet help <command>' for help on a specific command.

而且
C:\Git>msbuild /version
Microsoft (R) Build Engine version 15.1.1012.6693
Copyright (C) Microsoft Corporation. All rights reserved.

15.1.1012.6693

随着

Microsoft Visual Studio Professional 2017 
Version 15.2 (26430.12) Release
VisualStudio.15.Release/15.2.0+26430.12
Microsoft .NET Framework
Version 4.6.01586
2个回答

5
默认情况下,“基于SDK”的项目支持此功能。VS没有.NET Framework库的项目模板,但您可以创建.NET Standard库项目,并手动将csproj文件中的TargetFramework属性从netstandard1.6更改为net461。请注意,用于这些类型项目的项目系统尚不支持许多经典.NET项目中可用的功能(例如WinForms、Xaml、edmx的设计工具)。生成的项目文件如下所示:
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net461</TargetFramework>
  </PropertyGroup>
</Project>

2
那么关键点在于转换到新的csproj格式?因此,在VS默认支持它之前,通过黑客方式进行转换是没有意义的,对吧? - GGirard
1
是的,新格式带来了NuGet属性的集成和属性编辑器。还有NuGet.Build.Tasks.Pack NuGet包,但如果不向csproj添加更多由“sdk-style”项目默认的属性,则可能无法“足够好地”工作。 但是,如果您只创建“逻辑”NuGet包,则已经支持此功能,只是没有模板而已。这已经是许多库构建的方式(例如Newtonsoft.Json)。 - Martin Ullrich
我在与Azure相关的NuGet中看到过几次,并想知道它是如何工作的。现在似乎很清楚了:我将坚持使用我的旧nuspecs,因为我的解决方案包含类库项目,但也包括Asp.Net MVC和WebAPI。我不想在同一解决方案中有多种管理NuGet定义的方式。 - GGirard
1
有道理。但是应该也支持从传统项目引用“新式”csproj文件,这样你的Web应用程序仍然可以引用此项目。 - Martin Ullrich

1

看起来我没有搜索足够......这篇博客明确讲述了只有 .Net Core:http://blog.nuget.org/20170316/NuGet-now-fully-integrated-into-MSBuild.html

之前讨论的一些功能尚不完全支持基于 packages.config 的项目,例如在项目文件中定义 nuspec 元数据、直接从项目构建包等。我们正在努力将完整的 PackageReference 支持带入这些项目类型中。我们的目标是最终将 PackageReference 设为默认值,并远离所有其他格式。


1
Visual Studio 2017 版本 15.2 已经支持经典项目的 PackageReference,但这并不意味着它支持打包。 - Martin Ullrich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接