5

我有一个 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>

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

我将不胜感激任何帮助。

谢谢

理查德

4

3 回答 3

5

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

另外,我认为推荐的方法是创建一个单独的目标,该目标配置为在标准“构建”目标之后运行:

<?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>
于 2014-08-26T20:22:51.777 回答
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)")

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

于 2013-04-30T22:15:29.923 回答
1

您可以直接使用MSBuild Api,如本文所述。

Add-Type -AssemblyName 'Microsoft.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
$msbProject = [Microsoft.Build.Evaluation.ProjectCollection]::GlobalProjectCollection.GetLoadedProjects($project.FullName) | Select-Object -First 1
# use $msbProject to add/change AfterBuild target

或者你可以使用NugetPowerTools添加 Powershell 命令Get-MSBuildProject来做同样的事情。

此外,有关添加新目标的更多详细信息,请参阅此论坛帖子

于 2012-05-08T15:15:25.510 回答