MSBuild 使用 ItemGroup 和 EXEC 命令

2024-01-17

我创建了代码片段中显示的 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 http://sedotech.com/Resources#batching。如果你想了解更多,那么你可以拿起我的副本book http://sedotech.com/Resources/InsideMSBuildBook.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MSBuild 使用 ItemGroup 和 EXEC 命令 的相关文章

随机推荐

  • 为什么不以同样的方式处理所有这些变量?

    我正在检查 VB NET 中变量声明的位置并不重要 除了范围之外 对于这个问题 https stackoverflow com q 13259999 256431 我想我最好检查一下当它们被 提升 到闭包时会发生什么 我还没有阅读规范 但我
  • 如何使用宏获取 Word 文档的当前文件名(不带扩展名或完整路径)?

    我有代码可以提取文件的完整路径 减去扩展名 并且我正在尝试将其修改为仅存储文件名 再次不包含扩展名 Sub ShowFilename Dim pathName As String With ActiveDocument If Len Pat
  • 运行 .msi 安装程序后能否确定生成的命令行?

    如果我想要静默安装 是否有任何简单的方法来运行安装程序 选择所需的选项 然后确定等效安装所需的 msiexec 选项 开关 最好没有实际安装任何东西 不要点击 完成 或者您可以通过挖掘 MSI 数据库来找到所需的属性吗 是的 听起来您需要创
  • 如何保证VirtualAlloc分配的虚拟内存地址在2-4GB之间

    我尝试使用while 但是效果不是很好 有什么办法可以做到吗 bool found false uintptr t memaddr 0 int n 0 while found n lt 10 n 1 memaddr uintptr t Vi
  • 使用 AWS Glue ETL 将多个 parquet 文件合并到 AWS S3 中的单个 parquet 文件 python Spark (pyspark)

    我每 15 分钟运行一次 AWS Glue ETL 作业 每次在 S3 中生成 1 个 parquet 文件 我需要创建另一个作业以在每小时结束时运行 以使用 AWS Glue ETL pyspark 代码将 S3 中的所有 4 个 par
  • COM 与 .NET 6 互操作

    我们有一个用 C 编写的 NET 类库 我们正在尝试将其从 NET Framework v2 0 升级到 NET 6 在 NET 2 0 中 该库通过导入该库的 TLB 的 C 代码进行实例化 使用 为了使用 COM 使用 NET 6 库
  • HTML:更改

    的高度

    如何指定插入空行的高度 p 创造 在您的样式表或样式表部分中 定义以下内容 示例 p margin top 0 6em margin bottom 0em 您也可以在单独的标签中指定它 p p style margin top p
  • 由于“Binder 线程池”,应用程序未在模拟器上运行

    我正在尝试在模拟器上打开应用程序 但无法 在 Logcat 上我得到了这个 10 07 00 23 49 443 1268 1268 E hwservicemanager BINDER SET INHERIT FIFO PRIO faile
  • 如何将这个十六进制字符串转换为长字符串?

    我有 0xE94C827CEB 十六进制但作为字符串 即 1002011000043 dd mm yyyy HH mm ss 不幸的是 如果我只有字符串格式 我不知道如何进行转换 并且我没有 Convert ToLong 0xE94C827
  • usemin revved 文件名和 requirejs 依赖项

    我在 requirejs 和 usemin 中遇到以下问题 我想设置一个多页面应用程序 在其中动态加载仅包含页面特定功能的模块 例如 about gt about js home gt home js 我可以继续将所有内容打包在一个文件中
  • 带有名为“PropertiesController”的控制器的 ASP.NET MVC 路由[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我在尝试使用名称为 PropertiesController 的控制器 以及随后的路由 时遇到了一个棘手的问题 请耐心等
  • 如何从命令行运行 R 脚本文件

    我知道关于这个问题有很多问题 但我已经尝试了一切 我想我只是不明白命令行在 Windows 中是如何工作的 我的桌面上的文件夹中保存了一个文件 比方说 C Users abika 000 Desktop R models myfile R
  • urwid - 无限循环的输出屏幕

    我正在尝试制作一个简单的 urwid 作为无限循环的输出屏幕 它需要输出来自另一个类的数据 我现在找到的解决方案是 有一个 Printer 类 实际输出类的测试替换器 和queue属性 当需要显示某些内容时 会将其附加到queue 然后 有
  • 删除索引后是否应该重新编译表?

    我正在删除一些未使用的索引 我通常做的是 确保统计信息已更新 也许索引尚未使用 因为统计信息已经有一段时间没有更新了 为每个涉及的索引生成删除索引脚本和创建索引脚本 运行删除索引命令 update statistics tablename
  • Python VS Code 导入不起作用“无模块名称请求”

    我是 python 新手 刚学了 6 个月的 c 也是 VS Code 来自 VS 的新手 我的错误是 gt 发生异常 ModuleNotFoundError 没有名为 requests 的模块 文件 C Users ryanb Docum
  • Swift 中的 AES128 加密

    我对 AES 128 加密有疑问 iOS 中的加密字符串与 Android 中的加密字符串不同 下面是安卓代码 public class Encryption private static final String ALGORITHM AE
  • CardLayout 显示下一个面板 - java Swing

    我在使用 CardLayout 时遇到一些问题 我有一个面板和一个 下一步 按钮 单击它后我想显示第二个面板 在我的代码中 当我单击 下一步 按钮时 不会显示下一个面板 有人可以帮我解决这个问题吗 package com test impo
  • 如何删除文件中除第一个匹配行之外的重复行

    在下面的配置文件中 etc fine tune conf 我们有重复的行 clean history in os true 我们要删除所有包含以下内容的行clean history in os true除了文件中的第一个匹配行 到目前为止我
  • Firebase 令牌过期和处理刷新令牌的最佳实践

    我目前正在客户端应用程序 基于 Cordova 的移动应用程序 上使用 Firebase 并使用客户端上的 firebase 用户身份验证方法 使用电子邮件和密码登录 FacebookAuthProvider 根据我目前对会议到期的理解和经
  • MSBuild 使用 ItemGroup 和 EXEC 命令

    我创建了代码片段中显示的 ItemGroup 我需要迭代此 ItemGroup 并运行 EXEC 命令 也在代码片段中显示 我似乎无法让它发挥作用 代码返回如下所示的错误 注意 消息被写入 2 次 这是正确的 但 EXEC 命令未正确运行