Как получить доступ к макропеременным в файле csproj?

В моем файле csproj у меня есть другой путь сборки.

<BaseIntermediateOutputPath>C:\Temp\Build\MyProject</BaseIntermediateOutputPath>

Когда в событиях prebuild и post build у меня есть доступ к определенным макропеременным.

$(OutDir)
$(ProjectName)
$(ProjectPath)
$(SolutionDir)

Могу ли я использовать эти переменные в моем csproj?

Например, я пробовал следующее без успеха.

<BaseIntermediateOutputPath>C:\Temp\Build\$(ProjectName)</BaseIntermediateOutputPath>

Ответ 1

У меня было аналогичное требование, и использование $(MSBuildProjectName) выполняло эту работу для меня.

  <PropertyGroup>
    <ProjectView>ProjectFiles</ProjectView>
    <BaseIntermediateOutputPath>R:\$(MSBuildProjectName)\obj\</BaseIntermediateOutputPath>
  </PropertyGroup>

Здесь R: это моя буква диска RAMDISK.

Для других, у кого также могут возникнуть проблемы с настройкой буквы диска RAMDISK, я использовал простой VBS script

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colVolumes = objWMIService.ExecQuery _
    ("Select * from Win32_Volume") Where Label = 'RAMDISK'")
For Each objVolume in colVolumes
    objVolume.DriveLetter = "R:"
    objVolume.Put_
Next

Это гарантирует, что любой диск, загруженный с помощью метки RAMDISK, будет установлен на диск R: вместо вместо диска по умолчанию. Хотя это не является частью вашего Q, я уверен, что это будет удобно для других, у которых есть аналогичные требования использования RAMDISK для их файлов obj, и найти случай изменения букв дисков в файлах vbproj/csproj громоздким.

Ссылки: