Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用生成后操作创建nuget包_C#_Msbuild_Nuget - Fatal编程技术网

C# 使用生成后操作创建nuget包

C# 使用生成后操作创建nuget包,c#,msbuild,nuget,C#,Msbuild,Nuget,我有一个定制的命令行工具,它执行一些代码生成操作。基本上,它将一个程序集作为输入,并通过反射搜索特定的自定义属性,用于触发外部(JavaScript)文件的生成 一切工作(几乎)正常,但工具的分发和执行有些混乱。我想将它打包为一个Nuget包(托管在一个私有存储库中),它基本上包含工具和一个应该触发工具执行的构建目标 我应该如何包装该工具?我读到了有关特殊的Nuget工具、内容、和构建文件夹的信息,但我不知道放在哪里,以及如何设置自定义目标 我不知道这个问题是否“过于宽泛”,但即使我非常准确地知

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

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

我应该如何包装该工具?我读到了有关特殊的Nuget
工具
内容
、和
构建
文件夹的信息,但我不知道放在哪里,以及如何设置自定义目标


我不知道这个问题是否“过于宽泛”,但即使我非常准确地知道我需要什么,我也有一种空白页综合症。

在生成后操作中指定
$(SolutionDir).nuget\nuget.exe pack$(ProjectPath)-includeReferencedProject
。 还可以指定nuspec文件。如本文所述。 例如:


SDK
$version$
$title$
$author$
$author$
假的
$description$
首次发布
版权所有2016
SDK

我会将该工具放入NuGet包中的build目录,然后在同一个build目录中拥有一个自定义的MSBuild.targets文件。然后,将以这种方式写入此MSBuild.targets文件,以便在生成过程中的某个时候调用它

\build
    \MyPackage.targets
然后,生成目标文件将进入生成过程:

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

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

$(BuildDependsOn);
MyCustomTarget

上面的内容应该在构建过程中作为最后一项运行MyCustomTarget。

谢谢,但这不是我想要的。我有一个外部工具,我想用Nuget打包。生成的包应该为安装到其中的项目注册生成后操作(或类似操作)。该操作将触发该工具,因为它来自命令行。谢谢!那么你说存储一个exe的“正确”位置应该是在nuget包的build文件夹中,这个exe应该由一个build事件触发?对吗?是的,我会将.exe存储在MSBuild目标文件旁边的生成目录中。
<PropertyGroup>
    <BuildDependsOn>
        $(BuildDependsOn);
        MyCustomTarget
    </BuildDependsOn>
</PropertyGroup>

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