Надлежащее использование Вызывать-выражения?

Спасибо всему, что ответило! Я попробовал все решения, представленные здесь, и я сделал больше поиска в Интернете для других возможных решений, и я думаю, что нашел тот, который это обещает:

tr.top td {
  border-top: thin solid black;
}

tr.bottom td {
  border-bottom: thin solid black;
}

tr.row td:first-child {
  border-left: thin solid black;
}

tr.row td:last-child {
  border-right: thin solid black;
}
<html>

<head>
</head>

<body>

  <table cellspacing="0">
    <tr>
      <td>no border</td>
      <td>no border here either</td>
    </tr>
    <tr class="top row">
      <td>one</td>
      <td>two</td>
    </tr>
    <tr class="bottom row">
      <td>three</td>
      <td>four</td>
    </tr>
    <tr>
      <td colspan="2">once again no borders</td>
    </tr>
    <tr class="top bottom row">
      <td colspan="2">hello</td>
    </tr>
    <tr>
      <td colspan="2">world</td>
    </tr>
  </table>

</body>

</html>

Вывод:

enter image description here

Вместо того, чтобы иметь необходимость добавить top, bottom, left, и right классы к каждому <td>, все, что я должен сделать, добавляют top row к вершине <tr>, bottom row к нижней части <tr>, и row к каждому <tr> промежуточный. Есть ли что-то не так с этим решением? Есть ли какие-либо межплатформенные проблемы, о которых я должен знать?

14
задан Greg D 31 August 2009 в 03:47
поделиться

2 ответа

Мне нравится. Единственное, что я бы изменил, - это использовать больше функций Powershell вместо хрупких предположений. Например:

  • используйте Join-Path вместо конкатенации строк

  • используйте поставщика Env: \ для поиска каталога % programfiles (x86)% (или еще лучше, используйте поставщик HKML: \ , чтобы найти путь - он находится в SOFTWARE \ Microsoft \ VisualStudio \\ InstallDir)

  • , когда мне нужно написать строку, содержащую буквальные двойные кавычки и переменную расширения, я обычно прибегаю к синтаксису ниже. Очевидно, личные предпочтения.

     '"{0}" "{1}" / build "{2}"' -f $ devenv, $ solutionPath, $ releaseProfile
    

В некоторых случаях я был бы склонен использовать Process.Start (), чтобы я мог независимо захватывать потоки stdout и stderr (и, возможно, даже управлять stdin в интерактивном режиме, в зависимости от приложения).

PS - ' & 'не обязательно.

11
ответ дан 1 December 2019 в 12:52
поделиться

Я думаю, что это не нужно использовать здесь Invoke-Expression. Я сделал это с большим количеством скриптов сборки, и обычно это выглядит так:

$vsroot = "$env:ProgramFiles(x86)\Microsoft Visual Studio 9.0"
$devenv = "$vsroot\Common7\IDE\devenv.exe"
$sln = Join-Path <source_root> Source\MyProj\MyProj.sln
& $devenv $sln /build Release

или

& $devenv $sln /build "Release|Any CPU"

Хотя в последнее время у меня были проблемы с использованием devenv.exe (некорректные надстройки и т. Д.), Поэтому теперь я использую msbuild.exe:

$msbuild = 'C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe'
& $msbuild $sln /p:Configuration=Release

В настоящее время MSBuild может обрабатывать C #, VB и C ++ (вызывает vcbuild), но не может обрабатывать решения с проектами установки и развертывания в них. Однако я обнаружил, что это более надежно, чем использование devenv.exe.

Кстати, вам обычно нужно вызывать другие инструменты (sn.exe, signtool.exe, mt.exe и т. Д.) В сценарии сборки, специфичные для версия Visual Studio / .NET, с которой вы хотите работать. Поэтому обычно лучше настраивать переменные среды так же, как это делает командная строка VS 2008. Установив PowerShell Community Extensions , вы можете включить одну строку в заголовке профиля PSCX, чтобы включить это для настроек .NET 3.5 / VS 2008:

$Pscx:Preferences["ImportVisualStudioVars"] = $true
10
ответ дан 1 December 2019 в 12:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: