2010-05-03 4 views
2

Создана ItemGroup, указанная в фрагменте кода. Мне нужно выполнить итерацию через эту ItemGroup и запустить команду EXEC, также показанную в фрагменте кода. Кажется, я не могу заставить его работать. Код возвращает ошибку, показанную ниже (примечание - сообщение записывается 2 раза, что верно), но команда EXEC работает неправильно. Значение не устанавливается; поэтому EXEC не выполняется вообще. Мне нужно, чтобы EXEC выполнял два раза или какие-то разделы, которые я определяю в ItemGroup.MSBuild Работа с командой ItemGroup и EXEC

ОШИБКА: Шифрование WebServer AppSettings раздел шифрованной WebServer ConnectionStrings раздел C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_regiis.exe -pef "" "\ ГСА \ UI" -prov "RSACustomProvider" Секция настройки шифрования ... Раздел конфигурации '' не найден.

КОД SNIPPET:

<ItemGroup> 
    <SectionsToEncrypt Include="Item"> 
     <Section>appSettings</Section>  
    </SectionsToEncrypt> 
    <SectionsToEncrypt Include="Item">  
     <Section>connectionStrings</Section> 
    </SectionsToEncrypt> 
    </ItemGroup> 

    <Target Name="EncryptWebServerWebConfigSections"> 
    <Message Text="Encrypting WebServer %(SectionsToEncrypt.Section) section" /> 

    <Exec Command="$(AspNetRegIis) -pef &quot;%(SectionsToEncrypt.Section)&quot; &quot;$(DropLocation)\$(BuildNumber)\%(ConfigurationToBuild.FlavorToBuild)\$(AnythingPastFlavorToBuild)&quot; -prov &quot;$(WebSiteRSACustomProviderName)&quot;"/> 
    </Target> 

ответ

5

Проблема заключается в том, что вы пакетирование на 2 пункта в то время. Я имею в виду, что у вас есть заявления

%(SectionsToEncrypt.Section) 
%(ConfigurationToBuild.FlavorToBuild) 

В том же вызове задачи. Когда вы выполняете более одного элемента за один раз в одном вызове задачи, они будут выполняться независимо друг от друга. Вот почему вы об ошибке с указанием раздел конфигурации «» ...

Если ваш FlavorToBuild только имеет одно значение, что вы должны сделать, это вещи, которые в собственности, прежде чем позвонить в Exec, а затем использовать имущество. Таким образом, ваш один лайнер будет затем преобразовать:

<PropertyGroup> 
    <_FlavToBuild>%(ConfigurationToBuild.FlavorToBuild)<_FlavToBuild> 
</PropertyGroup> 
<Exec Command="$(AspNetRegIis) -pef &quot;%(SectionsToEncrypt.Section)&quot; &quot;$(DropLocation)\$(BuildNumber)\$(_FlavToBuild)\$(AnythingPastFlavorToBuild)&quot; -prov &quot;$(WebSiteRSACustomProviderName)&quot;"/> 

Если у вас есть несколько значений FlavorToBuild, то это сложнее. Вы бы 2 варианта:

  1. жесткий код Exec больше, чем один раз
  2. использования целевого дозирования с задачей дозирования, чтобы выполнить Foreach/Foreach

Дозирование является одним из самых непонятных элементов MSBuild. Я собрал несколько онлайн-ресурсов по адресу http://sedotech.com/Resources#batching. Если вы хотите узнать больше, чем тогда, вы можете получить копию моего book.

+1

+1 И может очень рекомендовать книгу - заменяет недели «ага, так что это не значит, что я не получил» с правильным туром сверху вниз. –

+1

+1 на рекомендации книги. Это действительно отлично. – chhenni

+0

Да +1 по рекомендации книги :) –

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