Преобразованию конфигурации Teambuild 2013 не удалось найти PublishDir
У меня есть решение VS 2010, которое использует преобразования конфигурации следующим образом:
<Target Name="AfterBuild">
<TransformXml Condition="'$(IsDesktopBuild)' == 'false'" Source="Web.config" Transform="$(ProjectConfigTransformFileName)" Destination="$(PublishDir)\_PublishedWebsites\$(ProjectName)\Web.config" />
<Delete Files="$(PublishDir)\_PublishedWebsites\$(ProjectName)\Web.Debug.config" Condition="'$(IsDesktopBuild)' == 'false'" />
<Delete Files="$(PublishDir)\_PublishedWebsites\$(ProjectName)\Web.Release.config" Condition="'$(IsDesktopBuild)' == 'false'" />
<Delete Files="$(PublishDir)\_PublishedWebsites\$(ProjectName)\Web.Something.config" Condition="'$(IsDesktopBuild)' == 'false'" />
<Delete Files="$(PublishDir)\_PublishedWebsites\$(ProjectName)\Web.Else.config" Condition="'$(IsDesktopBuild)' == 'false'" />
<AspNetCompiler Condition="('$(IsDesktopBuild)' != 'false') AND ('$(MvcBuildViews)'=='true')" VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
<AspNetCompiler Condition="('$(IsDesktopBuild)' == 'false') AND ('$(MvcBuildViews)'=='true')" VirtualPath="temp" PhysicalPath="$(PublishDir)\_PublishedWebsites\$(ProjectName)" />
</Target>
Это в каждом проекте веб-сайта (.csproj) в.sln.
Когда я запускаю v 4.0 MSBuild с указанным параметром /p:PublishDir, все в порядке. Но когда я запускаю это как определение сборки с использованием шаблона по умолчанию (GitTemplate.xaml), папка по какой-то причине разрешается в $(ProjectDir)
, а не место публикации. поэтому цель преобразования пытается скопировать файлы в несуществующую папку ($(ProjectDir)\_PublishedWebsites\$(ProjectName)\Web.config
).
Если я вручную укажу /p:PublishDir в STATIC месте на диске, сборка будет успешной. Как я могу сказать MSBuild, где на самом деле находится PublishDir?
Я счастлив редактировать рабочий процесс, чтобы назначить переменную или что-то, я просто не понимаю, как это возможно.
Я также попытался указать относительные пути (например, /p:PublishDir="..\..\bin\\"
) и переменные агента сборки команды (такие же, как мы настроили для путей сборки, например /p:PublishDir="D:\$(BuildAgentId)\$(BuildDefinitionId)\bin\\"
) безрезультатно - кажется, что переменные не развернуты и относительный путь не работает.
1 ответ
Добавьте что-то вроде этого перед целью AfterBuild:
<PropertyGroup>
<PublishDir>PATH_TO_YOUR_PUBLISH_DIR</PublishDir>
</PropertyGroup>
Вы должны быть в состоянии использовать относительные пути без проблем:
<PropertyGroup>
<PublishDir>..\..\bin\</PublishDir>
</PropertyGroup>
Помните, что путь будет относительно текущего файла проекта.
Если вы хотите переопределить его из командной строки, вы можете добавить условие вроде этого:
<PropertyGroup>
<PublishDir Condition="'$(PublishDir)'==''">PATH_TO_YOUR_PUBLISH_DIR</PublishDir> <!-- This will be the default value -->
</PropertyGroup>
Затем вызовите MsBuild с параметром /p:PublishDir="Your_New_Path", чтобы переопределить значение по умолчанию.
Если у вас есть решение VS, вы можете использовать что-то вроде этого:
<PropertyGroup>
<PublishDir Condition="'$(PublishDir)'==''">$(SolutionDir)PublishDir</PublishDir> <!-- This will be the default value -->
</PropertyGroup>
При этом будет использоваться каталог, в котором решение находится в качестве пользователя root, и будет создана папка "PublishDir".
Это будет работать, только если у вас есть решение, конечно, вы можете определить значение по умолчанию, если нет решения:
<PropertyGroup>
<SolutionDir Condition="'$(SolutionDir)'=='' Or '$(SolutionDir)'=='*Undefined*'">Your_Default_SolutionDir</SolutionDir>
<PublishDir Condition="'$(PublishDir)'==''">$(SolutionDir)PublishDir</PublishDir> <!-- This will be the default value -->
</PropertyGroup>