我创建了代码片段中显示的 ItemGroup。我需要迭代此 ItemGroup 并运行 EXEC 命令 - 也在代码片段中显示。我似乎无法让它发挥作用。代码返回如下所示的错误(注意 - 消息被写入 2 次,这是正确的),但 EXEC 命令未正确运行。未设置该值;因此 EXEC 根本没有执行。我需要 EXEC 执行两次或按我在 ItemGroup 中定义的部分执行。
错误:
加密 WebServer appSettings 部分
加密 WebServer 连接字符串部分
C:\WINDOWS\Microsoft.NET\Framework\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 "%(SectionsToEncrypt.Section)" "$(DropLocation)\$(BuildNumber)\%(ConfigurationToBuild.FlavorToBuild)\$(AnythingPastFlavorToBuild)" -prov "$(WebSiteRSACustomProviderName)""/>
</Target>
问题是您一次批量处理 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 有多个值,那么情况会更复杂。你有两个选择:
- 多次对 Exec 进行硬编码
- 使用目标批处理和任务批处理来执行 foreach/foreach
批处理是 MSBuild 最令人困惑的元素之一。我整理了一些在线资源http://sedotech.com/Resources#batching http://sedotech.com/Resources#batching。如果你想了解更多,那么你可以拿起我的副本book http://sedotech.com/Resources/InsideMSBuildBook.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)