gpt4 book ai didi

msbuild - 如何按用户禁用 MSBuild 的 目标?

转载 作者:行者123 更新时间:2023-12-04 16:02:37 27 4
gpt4 key购买 nike

我喜欢以普通(非管理员)用户的身份进行开发。我们的 VS2010 项目构建失败,并显示“无法注册输出。请尝试启用每用户重定向或使用提升的权限从命令提示符注册组件”。

我不能随意更改项目文件 ,有什么方法可以添加特定于用户的 MSBuild 目标或属性,从而在特定机器上或为特定用户禁用此步骤?我不想破解核心 MSBuild 文件。

我不想更改项目文件,因为我可能会不小心将其重新 checkin 。我也不想破解 MSBuild 核心文件,因为它们可能会被服务包覆盖。

鉴于 Visual C++ 项目文件(以及相关的 .targets 和 .props 文件)有大约一百万个地方可以改变构建顺序和导入任意文件,我希望能有一些类似的东西。

MSBuild 导入/评估项目文件如下(我只查看了我感兴趣的分支):

Foo.vcxproj
Microsoft.Cpp.Default.props
Microsoft.Cpp.props
$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props
Microsoft.Cpp.targets
Microsoft.Cpp.$(Platform).targets
ImportBefore\*
Microsoft.CppCommon.targets

“RegisterOutput”目标在 Microsoft.CppCommon.targets 中定义.我希望通过在 $(UserRootDir)\Microsoft.Cpp.$(Platform).user.props 中放置一个什么都不做的“RegisterOutput”目标来代替它, 即 %LOCALAPPDATA%\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props (如果 UserRootDir 尚未设置,则设置在 Microsoft.Cpp.Default.props 中)。

不幸的是,MSBuild 使用最后定义的目标,这意味着我的目标被内置目标覆盖。

或者,我可以尝试设置 %(Link.RegisterOutput)元数据,但我必须在所有 Link 上都这样做项目。知道如何做到这一点,或者即使它会起作用吗?

madgnome 建议我可以在 .vcxproj.user 文件中做一些事情。不幸的是,这在构建过程的开始就包含在内,这意味着替换目标将不起作用。

最佳答案

最终测试解决方案

RegisterOutput 在由 定义的链接过程中被调用$(BuildLinkTargets) (Microsoft.CppBuild.targets) 如下:

<BuildLinkTargets Condition="'$(ConfigurationType)'!='Utility'">
$(BuildLinkTargets);
_Link;
_ALink;
_Manifest;
RegisterOutput;
_XdcMake;
_BscMake;
</BuildLinkTargets>

如果你不想执行 RegisterOutput 你只需要在 BuildLinkTargets 的定义中删除这一步:
<PropertyGroup>
<BuildLinkTargets Condition="'$(ConfigurationType)'!='Utility'">
$(BuildLinkTargets);
_Link;
_ALink;
_Manifest;
_XdcMake;
_BscMake;
</BuildLinkTargets>
  • 如果您不想为 执行 RegisterOutput一个项目 ,您需要在文件中覆盖它: PROJECT_NAME.vcxproj.user (在您的项目文件旁边,此文件是特定于用户和项目的)
  • 如果你不想在 中执行 RegisterOutput您所有的项目 ,您需要在文件中覆盖它: $(UserRootDir)\Microsoft.Cpp.$(Platform).user.props (此文件是特定于用户的)
  • 关于msbuild - 如何按用户禁用 MSBuild 的 <RegisterOutput> 目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2773057/

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