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

3
我有一个定制的命令行工具,用于执行一些代码生成操作。基本上,它以一个程序集作为输入,并通过反射搜索特定的自定义属性,用于触发外部(JavaScript)文件的生成。
一切都运行得很好(几乎),但是工具的分发和执行有些混乱。我想将其打包为Nuget包(托管在私有仓库中),其中包含该工具和一个构建目标,应该触发该工具的执行。
我该如何打包这个工具?我看过关于特殊的Nuget“tool”,“content”和“build”文件夹的内容,但不知道放置什么以及如何设置自定义目标。
我不知道这个问题是否“过于宽泛”,但即使我相当确定自己需要什么,我也处于一种空白页面综合症的状态。
2个回答

4
我会将该工具放在NuGet包的构建目录中,并在同一构建目录下添加一个自定义的MSBuild .targets文件。这个MSBuild .targets文件应该被编写成在构建过程的某个时刻被调用。
\build
    \MyPackage.targets

那么你的构建目标文件将会在构建过程中自我插入

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

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

以上代码应该在构建过程的最后一项运行MyCustomTarget。

谢谢!那么你的意思是,存储应该由构建事件触发的exe的“正确”位置是在NuGet包的构建文件夹中?对吗? - Alberto Chiesa
是的,我会将 .exe 存储在与 MSBuild 目标文件相邻的构建目录中。 - Matt Ward

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>

谢谢,但这不是我要找的。我有一个外部工具,我想将其与Nuget打包。生成的软件包应该为安装它的项目注册一个后构建操作(或类似操作)。该操作应该触发该工具,就像从命令行中运行一样。 - Alberto Chiesa

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