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

このブログ投稿のように、MSBuildApiを直接使用できます。

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

または、 Powershellコマンドを追加するNugetPowerToolsGet-MSBuildProjectを使用して、ほぼ同じことを行うこともできます。

また、新しいターゲットの追加の詳細については、このフォーラムの投稿を参照してください。

于 2012-05-08T15:15:25.510 に答える