如何在安装NuGet包时将AfterBuild事件添加到项目中?

Ric*_*ard 5 powershell nuget-package

我有一个nuget包,它添加了一个可执行文件,我需要在项目每次构建后运行.

我可以通过在每个项目文件中添加一个部分来手动添加它,如下所示:

<Target Name="AfterBuild">
    <PropertyGroup>
      <PathToOutputExe>..\bin\Executable.exe</PathToOutputExe>
      <PathToOutputJs>"$(MSBuildProjectDirectory)\Scripts\Output.js"</PathToOutputJs>
      <DirectoryOfAssemblies>"$(MSBuildProjectDirectory)\bin\"</DirectoryOfAssemblies>
    </PropertyGroup>
    <AspNetCompiler Condition="'$(MvcBuildViews)'=='true'" VirtualPath="temp" PhysicalPath="$(ProjectDir)" />
    <Exec Command="$(PathToOutputExe) $(PathToOutputJs) $(DirectoryOfAssemblies)" />
  </Target>
Run Code Online (Sandbox Code Playgroud)

如何在安装nuget包时将其添加到项目中?(即在Install.ps1文件中使用DTE $项目对象)

我非常感谢任何帮助.

谢谢

理查德

Mik*_*ray 5

从NuGet 2.5开始,按照惯例,如果添加目标文件build\{packageid}.targets(注意'build'与内容和工具处于同一级别),NuGet会自动将Import添加到项目中的.targets文件中.然后你不需要在install.ps1中处理任何东西.导入将在卸载时自动删除.

另外,我认为推荐的方法可以创建一个单独的目标,配置为在标准的"Build"目标之后运行:

<?xml version="1.0" encoding="utf-8" ?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="NuGetCustomTarget" AfterTargets="Build">
        <PropertyGroup>
            <PathToOutputExe>..\bin\Executable.exe</PathToOutputExe>
            <PathToOutputJs>"$(MSBuildProjectDirectory)\Scripts\Output.js"</PathToOutputJs>
            <DirectoryOfAssemblies>"$(MSBuildProjectDirectory)\bin\"</DirectoryOfAssemblies>
        </PropertyGroup>
        <AspNetCompiler Condition="'$(MvcBuildViews)'=='true'" VirtualPath="temp" PhysicalPath="$(ProjectDir)" />
        <Exec Command="$(PathToOutputExe) $(PathToOutputJs) $(DirectoryOfAssemblies)" />
    </Target>
</Project>
Run Code Online (Sandbox Code Playgroud)


Glu*_*uip 3

这是添加后构建目标的脚本。它还使用上面提到的 NugetPowerTools。

$project = Get-Project
$buildProject = Get-MSBuildProject

$target = $buildProject.Xml.AddTarget("MyCustomTarget")
$target.AfterTargets = "AfterBuild"
$task = $target.AddTask("Exec")
$task.SetParameter("Command", "`"PathToYourEXe`" $(TargetFileName)")
Run Code Online (Sandbox Code Playgroud)

困难的部分是正确引用。这就是我的 powertools 脚本中的样子。