我创建了代码段中显示的ItemGroup。我需要迭代这个ItemGroup并运行EXEC命令 - 也显示在代码片段中。我似乎无法让它发挥作用。代码返回下面显示的错误(注意 - 消息写入2次,这是正确的),但EXEC命令未正确运行。该值未设置;因此EXEC根本没有执行。我需要EXEC执行两次或者我在ItemGroup中定义的部分。
错误: 加密WebServer appSettings部分 加密WebServer connectionStrings部分 C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_regiis.exe -pef“”“\ gaw \ UI”-prov“RSACustomProvider” 加密配置部分...... 找不到配置部分。
CODE 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 "%(SectionsToEncrypt.Section)" "$(DropLocation)\$(BuildNumber)\%(ConfigurationToBuild.FlavorToBuild)\$(AnythingPastFlavorToBuild)" -prov "$(WebSiteRSACustomProviderName)""/>
</Target>
答案 0 :(得分:5)
问题是您一次批量处理2个项目。我的意思是你有陈述
%(SectionsToEncrypt.Section)
%(ConfigurationToBuild.FlavorToBuild)
在同一个任务调用中。在同一任务调用中一次批处理多个项目时,它们将独立批处理。这就是为什么你的错误说明配置部分'' ......
如果您的FlavorToBuild只有一个值,那么您应该在调用Exec之前将其填充到属性中然后使用该属性。所以你的一个班轮将转换为:
<PropertyGroup>
<_FlavToBuild>%(ConfigurationToBuild.FlavorToBuild)<_FlavToBuild>
</PropertyGroup>
<Exec Command="$(AspNetRegIis) -pef "%(SectionsToEncrypt.Section)" "$(DropLocation)\$(BuildNumber)\$(_FlavToBuild)\$(AnythingPastFlavorToBuild)" -prov "$(WebSiteRSACustomProviderName)""/>
如果FlavorToBuild有多个值,那么它会更复杂。你有两个选择:
批处理是MSBuild最令人困惑的元素之一。我在http://sedotech.com/Resources#batching汇总了一些在线资源。如果您想了解更多信息,那么您可以获取我book的副本。