【问题标题】:Creating a nuget package containing a custom build step for .NET Core创建包含 .NET Core 的自定义构建步骤的 nuget 包
【发布时间】:2017-01-03 08:05:59
【问题描述】:

是否可以创建一个包含自定义构建步骤的 nuget 包(分析生成的程序集并自动生成一些元数据)?目标环境应该是具有新 .csproj 格式的 .NET Core(当前使用 Visual Studio 2017 RC)。最好的情况是这仅添加一个 msbuild 步骤,而不依赖于项目生成的程序集。

如果看到完整的 .NET 应该是可能的,但是 msbuild 的文档和 .NET Core 的新 .csproj 的文档目前有点稀疏。

【问题讨论】:

  • 我认为这样做的方法是通过built-in target imports。不确定它是否适用于核心项目,但我不明白为什么它不会。比乱搞安装脚本要容易得多。

标签: msbuild nuget .net-core visual-studio-2017


【解决方案1】:

您可以将 MSBuild 目标添加到“build”文件夹中的 NuGet 包。目标或道具文件名必须与包 ID 匹配。通过“PackageReference”或packages.config安装时,NuGet会自动将targets/props文件导入csproj,所以这些文件必须写成有效的MSBuild代码。

即如果你的包被命名为“MyClassLibrary”,你可以有以下布局:

(package root)
    lib/
        netstandard1.3/
            MyClassLibrary.dll
    build/
        netstandard1.3/
            MyClassLibrary.props
            MyClassLibrary.targets

例如,请参阅 NuGet.org 上的 Microsoft.Extensions.Configuration.UserSecrets 或 GitHub 上的 source code。此包使用 MSBuild 目标在编译步骤之前自动生成程序集属性

【讨论】:

  • 希望获得更多信息!我可以使用.targets文件将Content文件从包复制到安装包的项目吗?
【解决方案2】:

如果在您的 nuget 包中找到它,Nuget 可能会在安装过程中执行“init.ps1”powershell 脚本。但请注意,Nuget 3.x 中修改了脚本支持:

在 Nuget 3.xx 中,Powershell 脚本支持已修改为不再执行安装和卸载脚本(install.ps1、uninstall.ps1),但仍会执行初始化脚本。

此外,在 Visual Studio 之外的命令行或其他操作系统上运行 NuGet 无法执行这些 Powershell 脚本,因为它们依赖于 Visual Studio 自动化。 Powershell 在 NuGet 中提供 shim 以允许在 Visual Studio 中运行缺失的功能 Powershell 脚本支持已修改为不再执行安装和卸载脚本,但仍会执行初始化脚本。

您可以在“Powershell 安装和卸载脚本”中找到更多here

【讨论】:

  • 感谢您的信息。您是否知道任何 nuget 包添加了可用作参考的自定义构建步骤?可能是 .NET Core 的一个?
  • 我猜这些 .ps1 脚本不会在 MacOS 上执行?即使你已经安装了 PowerShell Core。我使用 Jetbrains Rider 作为 IDE,我的感觉是这不支持。
猜你喜欢
  • 1970-01-01
  • 2011-11-28
  • 2016-10-27
  • 2017-02-24
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
  • 2015-02-18
相关资源
最近更新 更多