2010-05-03 81 views
2

我創建了代碼片段中顯示的ItemGroup。我需要遍歷這個ItemGroup並運行EXEC命令 - 也顯示在代碼片段中。我似乎無法得到它的工作。該代碼返回下面顯示的錯誤(注 - 消息被寫入2次,這是正確的),但是EXEC命令沒有正確運行。價值沒有被設置;因此EXEC根本沒有執行。我需要EXEC執行兩次或通過我在ItemGroup中定義的部分執行。MSBuild使用ItemGroup和EXEC命令

ERROR: 加密Web服務器appSettings部分 加密Web服務器connectionStrings節 C:\ Windows \ Microsoft.NET \框架\ V2.0.50727 \ ASPNET_REGIIS.EXE -pef 「」 「\ GAW \ UI」 -prov 「RSACustomProvider」 加密配置部分... 未找到配置部分''。

代碼片段:

<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的多個值,那麼它更復雜。您將有兩個選擇:

  1. 硬代碼Exec的一次
  2. 使用覘配料多與任務批處理執行的foreach /的foreach

配料是的MSBuild的最混亂的因素之一。我在http://sedotech.com/Resources#batching上彙集了一些在線資源。如果你想知道更多,那麼你可以拿起我的book的副本。

+1

+1可以強烈推薦這本書 - 用適當的上下游來替代「aha的星期,這樣我沒有得到」。 – 2010-05-04 22:05:02

+1

書籍推薦+1。這真的很棒。 – chhenni 2012-03-30 08:49:25

+0

對書推薦是+1 +1 – 2012-06-06 20:43:04