2016-05-05 2 views
0

Это простой пакетный файл, который выполняет копированиеПочему BaseOutputPath не разрешает эту цель AfterBuild?

\ Bin \ Debug или \ Bin \ RELEASE -

и очищает некоторое количество мусора, что библиотеки NuGet перетащить на.

Но, это свойство $ (BaseOutputPath) разрешает пробел.

<Target Name="AfterBuild"> 
    <!-- $(BaseOutputPath)\$(Configuration)\. doesn't work! --> 
    <Exec Command="CALL postbuild.bat bin\$(Configuration)\" /> 
</Target> 

Так 2 вопроса:

  1. Что такое правильный "свойство" использовать?
  2. Как следует избегать этого свойства?
+0

'$ (BaseOutputPath)' - правильный синтаксис, но в документах указано '* if * оно установлено', что может означать, что если вы его нигде не задали, его просто нет (и это соответствует вашим наблюдениям). Я предполагаю, что это проект C#, поэтому я бы пошел на '$ (OutputPath)', который обычно уже включает $ (Конфигурация) и $ (Платформа). – stijn

+1

Это ответ! переместите этот комментарий, чтобы ответить, поэтому я могу отметить его правильно. – MatthewMartin

ответ

2

Документация по BaseOutputPath состояния «Если он установлен, MSBuild будет использовать OutputPath = $ (BaseOutputPath) \ $ (Configuration) \» так, другими словами: если вы не установите его в файле проекта (вручную, для него нет записи VS gui), она просто не определена. Как ни странно, если я ищу все файлы в каталоге программных файлов MsBuild, то BaseOutputPath не будет найден нигде. Так что, возможно, он используется только для типов проектов, которые я не установил, или это где-то в другом месте (не знаю, где это будет). Таинственный, но у меня нет времени, чтобы понять это. В Microsoft.Common.CurrentVersion.targets имеет межжала информацию, хотя, и ваш ответ:

OutDir: 
Indicates the final output location for the project or solution. When building a solution, 
OutDir can be used to gather multiple project outputs in one location. In addition, 
OutDir is included in AssemblySearchPaths used for resolving references. 

OutputPath: 
This property is usually specified in the project file and is used to initialize OutDir. 
OutDir and OutputPath are distinguished for legacy reasons, and OutDir should be used if at all possible. 

BaseIntermediateOutputPath: 
This is the top level folder where all configuration specific intermediate output folders will be created. 
Default value is obj\ 

IntermediateOutputPath: 
This is the full intermediate Output Path, and is derived from BaseIntermediateOutputPath, if none specified 
(eg. obj\debug). If this property is overridden, then setting BaseIntermediateOutputPath has no effect. 

$(OutDir) Так будет правильный выбор здесь, или $(outputPath) бы сделать это, как хорошо. По умолчанию они настроены на что-то вроде bin\$(Configuration), так что это именно то, что вы хотите.

Смежные вопросы