使用后期构建操作创建nuget包

时间:2016-06-22 07:28:16

标签: c# msbuild nuget

我有一个自定义命令行工具,它执行一些代码生成操作。基本上,它需要一个程序集作为输入,并通过反射搜索自定义属性,用于触发外部(JavaScript)文件的生成。

一切正常(几乎)很好,但工具的分发和执行有些混乱。我想将它打包为Nuget包(托管在私有存储库中),它基本上包含工具和应该触发工具执行的构建目标。

我该如何打包工具?我读到了特殊的Nuget toolcontentbuild文件夹,我不知道在哪里放置什么,以及如何设置自定义目标。

我不知道问题是否“过于宽泛”,但即使我完全知道自己需要什么,我也会出现空白页面问题。

2 个答案:

答案 0 :(得分:1)

在帖子构建操作中指定$(SolutionDir).nuget\nuget.exe pack $(ProjectPath) -IncludeReferencedProjects。 您也可以指定nuspec文件。如此处所述https://docs.nuget.org/create/nuspec-reference。 例如:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>SDK</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>$author$</authors>
    <owners>$author$</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>$description$</description>
    <releaseNotes>Initial release</releaseNotes>
    <copyright>Copyright 2016</copyright>
    <tags>SDK</tags>
  </metadata>
  <files>
    <file src="tools\install.ps1" target="tools\install.ps1" />
    </files>
</package>

答案 1 :(得分:1)

我会将该工具放入NuGet包内的构建目录中,然后在同一个构建目录中有一个自定义的MSBuild .targets文件。然后,这个MSBuild .targets文件将以这样的方式编写,以便在构建过程中的某个时刻调用它。

\build
    \MyPackage.targets

然后您的构建目标文件insert itself将进入构建过程:

<PropertyGroup>
    <BuildDependsOn>
        $(BuildDependsOn);
        MyCustomTarget
    </BuildDependsOn>
</PropertyGroup>

<Target Name=“MyCustomTarget“>
    <!-- Execute tool -->    
</Target>

上面应该运行MyCustomTarget作为构建期间的最后一项。