问题标签 [msbuild-propertygroup]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
995 浏览

visual-studio-2012 - 包含路径的条件属性会中断 IntelliSense 编辑吗?

我有一个构建,其中一些包含和库路径必须根据构建是 32 位还是 64 位而有所不同,并且必须进行参数化以便用户轻松编辑。我正在使用属性表来处理该要求。

在学习了条件属性之后,我想我会尝试摆脱使用每个平台属性表来根据主属性表中的值设置宏(例如PGBASEDIR$(PGBASEDIR_x64)x64 和$(PGBASEDIR_x86)x86 上设置;有关详细信息,请参阅回答上面链接的问题)。

我改为在我的msbuild 目标文件中使用条件属性,但发现虽然构建它自己工作,但VS 的编辑器找不到路径由条件属性指定的包含文件。如果我在属性表.props文件的条件属性组中设置属性,或者将单个条件属性添加到主属性组,情况也是如此。

所以我在 msbuild 目标文件中都试过这个:

并且还尝试将其添加到所有构建配置/平台中包含的属性表文件中。结果相同。我还尝试在属性表的主<PropertyGroup Label="UserMacros">块中使用单个条件属性;再次,同样的效果。

当我通过转到项目属性、对其进行编辑并MACROS>在 UI 中按选项卡打开列表来检查 Visual Studio 中的宏列表时,我看到了在属性表中静态定义的宏,但没有看到条件宏。

我尝试<BuildMacro>在主属性表<ItemGroup>中添加条目以防出现问题,例如:

...但没有看到任何变化。

在所有情况下,其自身的构建都运行良好,但 Visual Studio 的编辑器抱怨它找不到标头(因此找不到其中定义的任何内容)。

如果我坚持使用堆叠的属性表,它会起作用,例如:

  • pg_sysdatetime 项目

    • 发布 | win32
    • pg_sysdatetime.props

      /li>
    • pg_sysdatetime_x86.props

      • 定义<PGBASEDIR>$(PGBASEDIR_x86)</PGBASEDIR>
    • 发布 | x64
    • pg_sysdatetime.props
      • ...同上...
    • pg_sysdatetime_x64.props
      • 定义<PGBASEDIR>$(PGBASEDIR_x64)</PGBASEDIR>

我正在使用 Visual Studio 2012 Express。

0 投票
1 回答
13433 浏览

c# - MSBuild如何传递参数来设置属性值?

假设我在一个解决方案中有 3 个 cs 项目,并且我在所有 3 个 csproj 文件中导入了这个 Common.props 文件。

这是我的 Common.props 文件,它将位于解决方案级别,我的解决方案中的每个项目都将导入这个 Common.props 文件,我试图弄清楚如何通过命令行在构建服务器上设置 Externals 属性调用一个自定义 CI.Build 文件,该文件也将位于解决方案级别。MSBuild 对我来说很新,我做了各种各样的搜索来寻找答案,但我发现没有任何东西对我来说是 100% 有意义的。

0 投票
1 回答
443 浏览

batch-file - MSBuild 批处理文件 - 自定义任务参数

如何在我的 MSBuild 中访问自定义参数?

例如,这是一个调用:

我想访问这样的任务:

...或者无论如何,就像我调用 MSBuild.exe 时通过批处理文件发送的变量一样

0 投票
0 回答
361 浏览

msbuild - 目标中设置的 MSBuild 属性在父目标中不可见

这是我的目标文件

msbuild 的输出:

目标“TestInit”中设置的TestInitResult的值在返回时在目标“BuildApp”中不可见。

请让我知道如何使 TestInitResult 在父目标中可见。或者是否有更好的方法来实现所需的结果。

我想要实现的是,首先 TestInit 目标应该运行,然后 target2 应该运行,并且目标 RunBuild 只有在 TestInit 成功时才应该运行。如果 TestInit 失败,只运行 target2,跳过 RunBuild。

谢谢你。

0 投票
0 回答
40 浏览

msbuild - MSBuild:使用属性表设置更新自定义修改的项目属性

我正在尝试更新 Microsoft.Cpp.Win32.user 属性表,其中计划更新下面提到的设置。1. c++ -> 常规 -> 优化 -> 优化 = 禁用 (/Od)。2.链接器->常规->输出目录=C:\BuildPath。

为了完成上述任务,我在 VS 2013 中更新了现有的 Microsoft.Cpp.Win32.user 属性文件。但是当某些项目具有手动输出目录项目设置(即 D:\BuildProjectPath)和那些项目 outdir 时,我遇到了问题未从 Microsoft.Cpp.Win32.user 属性文件更新。要更新这些设置,我必须手动选择. 让我知道我们如何解决这个问题。

0 投票
1 回答
583 浏览

c# - 为 Visual Studio 中的所有构建定义条件常量

我有一个带有一些代码的项目。我想确定是否使用了 RyuJIT,如果是,则RyuJIT另写LegacyJIT

我写的:

然后我试图定义一个常数。所以我.csproj在记事本中打开我的并写下以下内容:

但它不起作用:没有定义常量,因此总是为任何目标框架编译第二行。我究竟做错了什么?如何在构建之间共享这个常量?

0 投票
1 回答
492 浏览

powershell - MSBuild:如何保证未来的导入项目路径?

几年前有人问过类似的问题,但我想知道在此期间是否有任何变化,或者人们是否有新的想法如何做到这一点。

我已将 MSBuildTasks(MSBuild 社区任务)作为 Nuget 包导入到我的解决方案中的项目中。我可以为 .targets 文件的路径定义一个属性,如下所示:

...然后使用以下命令导入它:

当然,我可能会选择在以后更新包,在这种情况下文件夹名称会改变,所以我宁愿避免硬编码版本号。我想避免这种情况的一种方法是让 powershell 脚本查找最新版本:

...并将其作为 MSBuild 的命令行属性注入:

我可以通过一条消息确认注入的路径确实已传输到我的目标:

...但是如果我尝试使用上面相同的导入语句导入,我会收到以下错误消息:

这就是我没有想法的地方。如何避免在工具路径中硬编码版本号?

0 投票
0 回答
29 浏览

msbuild-propertygroup - 将不相关的 Property 和 ItemGroup 合并为一个 Property

我有一个 Property 和一个 ItemGroup,我需要将它们合并为一个具有 1 对 1 关系的 Property:

我需要做什么才能得到这样的最终结果?

0 投票
1 回答
324 浏览

.net - 有条件地更改主程序集名称时,调试在 VS2017 中不起作用

由于 ClickOnce,我需要为使用的每个环境/配置更改 WPF 应用程序的程序集名称。

配置是:

  • 调试
  • 测试
  • 发布

因此,为了能够将这 3 个环境发布到 ClickOnce 并将它们全部安装在一台机器上而不会覆盖另一台机器,我们需要为所有三个环境的解决方案的主项目使用不同的程序集名称。程序集将被命名为:

  • MyApp.Client.Debug
  • MyApp.Client.Testing
  • 我的应用程序客户端

多亏了这个 StackOverflow 答案,我设法做到了,而且效果很好。MyApp.Client.csproj 的代码是这样的:

我可以将它发布到我的不同环境并且运行良好,我可以执行我的应用程序并使用它。但我无法在 Visual Studio 中调试它,似乎 IDE 将“MyApp.Client”作为应用程序入口点并抛出如下内容:

Visual Studio 无法开始调试,因为缺少调试目标“D:\Code\MySolution\MyApp\bin\Testing\MyApp.Client.exe”。请构建项目并重试,或适当设置 OutputPath 和 AssemblyName 属性以指向目标程序集的正确位置。

在测试中,它应该搜索 MyApp.Client.Testing.exe,但这不会发生。关于这个错误,我已经在谷歌上搜索了一段时间,但我一直无法找到解决方案。我发现的所有参考资料都谈到了更改的 OutputPath 之类的东西,但我认为这不是问题,因为 OutputPath 没问题,问题是可执行文件名称。

任何帮助,将不胜感激。谢谢。

0 投票
1 回答
229 浏览

visual-studio - TF Build Agent 的 .csproj/msbuild PropertyGroup 配置

如何使项目构建在 1)(本地)在 Visual Studio 内编译和 2)由 TF Build Agent 上的 TFS Build Server 触发时表现不同?

我试过(都没有成功)

我(在这两种情况下)创建了 2 个这样的属性组,其中 == 和 != 在第一个条件(应该导致不同行为的条件)和 PropertyGroup 中的不同内容(这是我真正的目标)中交换。

我正在使用 VS 2017 和 TFS 2017。

编辑/更新:

我以自己的方式发现了错误,是我编辑了 AnyCPU PropertyGoup 并构建了 x86。