gpt4 book ai didi

MSBuild 使用 ItemGroup 和 EXEC 命令

转载 作者:行者123 更新时间:2023-12-02 01:22:10 24 4
gpt4 key购买 nike

我创建了代码片段中显示的 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 &quot;%(SectionsToEncrypt.Section)&quot; &quot;$(DropLocation)\$(BuildNumber)\%(ConfigurationToBuild.FlavorToBuild)\$(AnythingPastFlavorToBuild)&quot; -prov &quot;$(WebSiteRSACustomProviderName)&quot;"/>
</Target>

最佳答案

问题是您一次批量处理 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 的副本.

关于MSBuild 使用 ItemGroup 和 EXEC 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2761967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com