2016-06-22 40 views
0

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

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

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

我不知道这个问题是否“太宽泛”,但即使我确切地知道我需要什么,我也是一种空白页症候群。

回答

1

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

\build 
    \MyPackage.targets 

那么你的构建目标文件将insert itself到构建过程:

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

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

以上应该运行MyCustomTarget作为构建过程中的最后一个项目。

+0

谢谢!所以你说,存储应该由构建事件触发的exe文件的“正确”位置在nuget包的构建文件夹中?对? –

+0

是的,我会将.exe存储在MSBuild目标文件旁边的构建目录中。 –

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> 
+0

谢谢,但这不是我要找的。我有一个我想用Nuget打包的外部工具。所产生的软件包应该为安装到其中的项目**注册一个构建后操作(或类似的东西)**。该操作应该触发该工具,因为它来自命令行。 –