次のようにPowerShellにDLLをロードするように起動アクションが設定されているVisualStudioプロジェクトがあります。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Platform)' == 'Debug|x86'">
<StartAction>Program</StartAction>
<StartProgram>C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe</StartProgram>
<StartArguments>-NoProfile -NoExit -Command Add-Type -Path "Foo.dll" -PassThru | Select FullName</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<StartAction>Program</StartAction>
<StartProgram>c:\windows\system32\windowspowershell\v1.0\powershell.exe</StartProgram>
<StartArguments>-NoProfile -NoExit -Command Add-Type -Path "Foo.dll" -PassThru | Select FullName</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<StartProgram>C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe</StartProgram>
<StartArguments>-NoProfile -NoExit -Command Add-Type -Path "Foo.dll" -PassThru | Select FullName</StartArguments>
<StartAction>Program</StartAction>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<StartProgram>c:\windows\system32\windowspowershell\v1.0\powershell.exe</StartProgram>
<StartArguments>-NoProfile -NoExit -Command Add-Type -Path "Foo.dll" -PassThru | Select FullName</StartArguments>
<StartAction>Program</StartAction>
</PropertyGroup>
</Project>
冗長性を取り除くために、ファイルを次のように手作業で編集しました。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup '$(Platform)' == 'x86'">
<StartProgram>C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe</StartProgram>
</PropertyGroup>
<PropertyGroup Condition="'$(Platform)' == 'AnyCPU' or Condition="'$(Platform)' == 'x64'">
<StartProgram>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe</StartProgram>
</PropertyGroup>
<PropertyGroup>
<StartAction>Program</StartAction>
<StartArguments>-NoProfile -NoExit -Command Add-Type -Path "Foo.dll" -PassThru | Select FullName</StartArguments>
</PropertyGroup>
</Project>
ここで、ハードコードされた「Foo.dll」を「$(TargetPath)」のようなものに置き換えたいと思います。ただし、それは空の文字列に評価されます。以下も空の文字列に解決されます。
- $(AssemblyName)
- $(TargetName)$(TargetExt)
- $(TargetFileName)
値を設定<StartArguments>-NoProfile -NoExit -Command Add-Type -Path "$(Platform)" -PassThru | Select FullName</StartArguments>
すると、コマンドラインが作成されます"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -NoExit -Command Add-Type -Path "x64" -PassThru | Select FullName