Czy kiedykolwiek musiałeś uruchomić aplikację z linii poleceń, która miała tak dużo linijek z argumentami, że nie mieściła się w oknie cmd? Ja miałe taką przyjemność i ten post jest właśnie o tym jak rozwiązać taki problem. Problem można rozwiązać za pomocą
programu wsadowego (na ogół nazywam go start.bat). W nim zawarte jest polecenie startujące aplikację z argumentami. Aby debugować taką aplikację z poziomy VS to należy dodać parametry do właściwości programu. Poniżej są przedstawione 2 argumenty:
Napisałem skrypt w PS, aby wygenerować start.bat, który będzie mógł być wystartowany z tymi argumentami:
function New-StartBat
{
param(
[string] $csprojFilePath,
[string] $outputDir = "."
)
$userFileExtension = ".user"
$startBatFileName = "start.bat"
if(!(test-path $csprojFilePath))
{
throw "Wrong path to csproj file: $csprojFilePath"
}
[xml]$csprojContent = gc $csprojFilePath
[string]$outputType = ([string]$csprojContent.Project.PropertyGroup.OutputType)
.Trim();
if( -not($outputType -match "Exe"))
{
throw "Output type is not exe"
}
$assemblyName = ([string]$csprojContent.Project.PropertyGroup.AssemblyName)
.Trim()
$startbarContent = "start /B $assemblyName.$outputType"
$userFile = $csprojFilePath + $userFileExtension
if(!(test-path $userFile))
{
Write-host "No user file for $csprojFilePath"
$outputConditionStartBat = join-path $outputDir $startBatFileName
Write-Host "Genereting start.bat. Output is $outputConditionStartBat"
$startbarContent |
out-file $outputConditionStartBat -Encoding ascii
}
else
{
#region For each condition in user file
[xml]$userFileContent = gc $userFile
$userCondition = $userFileContent.Project.PropertyGroup.Condition
$csProjConditions = $csprojContent.Project.PropertyGroup.Condition
foreach($csprojCondition in $csProjConditions)
{
if($csprojCondition -eq $null)
{
continue;
}
[string]$conditionString = ([string]$csprojCondition)
.Trim()
$indexOfequals = $conditionString.LastIndexOf("==")+2;
if($indexOfequals -gt 2)
{
$conditionSimpleString = $conditionString
.Substring($indexOfequals)
.Trim()
.Replace("'","")
.Replace("|","_")
if($contains = $userCondition -contains $conditionString)
{
$propertyGroup = $userFileContent.Project.PropertyGroup |
?{$_.Condition -eq $conditionString }
$startArguments = $propertyGroup.StartArguments
$startBatContentWithArgs = $startbarContent+ " " + $startArguments
$outputConditionStartBat = join-path $outputDir ($conditionSimpleString + "_" +$startBatFileName)
Write-Host "Genereting start.bat for $conditionSimpleString. Output file is $outputConditionStartBat"
$startBatContentWithArgs |
out-file $outputConditionStartBat -Encoding ascii
}
}
}
#endregion
}
}
Dla różnej konfiguracji (Platform Configuration) możemy mieć różne parametry. Wygenerowany start.bat możemy uzyskać poprzez wywołanie polecenia:
New-StartBat -csprojFilePath "SuperProjectName.csproj" -outputDir ".\bin\Debug"
Brak komentarzy:
Prześlij komentarz