Объем Объекта ItemGroup, альтернативно, “Почему MSBuild ненавидит меня?”

RMDIR или RD, если Вы используете классическую Командную строку (cmd.exe):

rd /s /q "path"

при использовании PowerShell можно использовать Remove-Item (который искажается к del, erase, rd, ri, rm и rmdir), и берет -Recurse аргумент, который может быть закорочен к [1 110]

rd -r "path"
10
задан Christopher Karper 6 July 2009 в 20:03
поделиться

4 ответа

Вы пробовали использовать DependsOnTarget вместо CallTarget? Возможно, проблема с областью видимости вызвана CallTarget.

9
ответ дан 3 December 2019 в 22:38
поделиться

Предыдущий комментатор был прав, вам следует изменить это, чтобы использовать DependsOnTargets вместо использования задачи CallTarget. Вы видите ошибку , а не проблему определения объема. способ избежать этой ошибки - использовать DependsOnTargets (в любом случае это гораздо лучший подходz).

Sayed Ibrahim Hashimi

Моя книга: Внутри Microsoft Build Engine: Использование MSBuild и Team Foundation Build

5
ответ дан 3 December 2019 в 22:38
поделиться

Мы делаем нечто подобное в нашей сборке. Мы передаем версию как параметр командной строки.

В нашем TFSBuild.proj мы устанавливаем версию 0.0.0.0, если версия не была предоставлена:

<!--Our assembly version. Pass it in from the command prompt like this: /property:Version=1.0.0.0-->
<PropertyGroup>
    <Version>0.0.0.0</Version>
</PropertyGroup>

<PropertyGroup>
    <!--Used to ensure there is a newline before our text to not break the .cs files if there is no newline at the end of the file.-->
    <newLine>%0D%0A</newLine>

Затем мы делаем это:

<Target Name="BeforeCompile">
    <!--Update our assembly version. Pass it in from the command prompt like this: /property:Version=1.0.0.0-->

    <!--attrib needs to be run first to remove the read only attribute since files from tfs are read only by default.-->
    <Exec Command='attrib -R $(SolutionRoot)\Source\Project\GlobalAssemblyInfo.cs'  />

    <WriteLinesToFile File="$(SolutionRoot)\Source\Project\GlobalAssemblyInfo.cs"
                      Lines='$(newLine)[assembly: AssemblyVersion("$(Version)")]'/>

</Target>
0
ответ дан 3 December 2019 в 22:38
поделиться

Как сказано, вам следует использовать DependsOnTargets. Я провел небольшое исследование объема MSBuild, вы можете найти мои результаты в моем блоге: http://blog.qetza.net/2009/10/23/scope-of-properties-and-item-in- an-msbuild-script /

Дело в том, что существует глобальная область видимости для проекта и локальная область видимости для цели. При входе в цель глобальная область копируется, а при выходе из цели локальная область снова объединяется. Таким образом, CallTarget не получит измененные значения локальной области видимости, но DependsOnTargets получат, поскольку первая цель выходит до входа во вторую цель.

1
ответ дан 3 December 2019 в 22:38
поделиться
Другие вопросы по тегам:

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