gpt4 book ai didi

visual-studio-2010 - 从 Visual Studio 2008 转换的解决方案在 Visual Studio 2010 中的 Gacutil 后期构建步骤失败

转载 作者:行者123 更新时间:2023-12-02 02:08:35 25 4
gpt4 key购买 nike

我已将包含多个项目的 .NET 2.0 解决方案从 Visual Studio 2008(所有内容均正确构建)转换为 Visual Studio 2010。我在以 Admistrator 模式运行的 Visual Studio 2010 中加载该解决方案并选择“构建解决方案”。在某些项目的某些构建后步骤中构建失败:

Microsoft (R) .NET Global Assembly Cache Utility.  Version 3.5.30729.1
Copyright (c) Microsoft Corporation. All rights reserved.

Failure adding assembly to the cache: Access denied. You might not have administrative credentials to perform this task. Contact your system administrator for assistance.
36>C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.Targets(3717,9): error MSB3073: The command ""C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\gacutil.exe" /i MyAssembly.dll" exited with code 1.

如果我选择这些相同的项目,并且只构建单个项目,而不是整个解决方案,那么 gacutil 命令就会成功。

错误消息听起来好像权限有问题(“访问被拒绝”),但我已验证 Visual Studio 2010 正在管理员模式下运行——我在标题栏中看到它(“MySolution - Microsoft Visual Studio (管理员)”)。

为什么 gacutil 在构建整个解决方案时会失败,而在只构建解决方案中的单个项目时会成功?

最佳答案

我最近在将我们的一个解决方案转换为 Visual Studio 2010 后遇到了完全相同的问题。

分析表明,如果两个连续编译的项目在它们的构建后步骤中调用 gacutil并且第二个项目足够小,并且 构建机器足够快,然后 gacutil 的第二次调用将系统性地失败并出现“访问被拒绝”错误。

这看起来像是某种竞争条件,但我们无法确定确切的根本原因。在 gacutil 实例运行时使用繁忙循环阻止构建后步骤并没有改变这种情况。

最后,我们使用 gacutil 的 4.0 版而不是 3.5 版解决了这个问题。我们更改了构建后步骤中的所有调用:

"$(FrameworkSDKDir)Bin\gacutil.exe" /if "$(TargetPath)" /nologo

收件人:

"$(FrameworkSDKDir)Bin\NETFX 4.0 Tools\gacutil.exe" /if "$(TargetPath)" /nologo

应用这些更改后,gacutil 在构建过程中没有再次失败。

关于visual-studio-2010 - 从 Visual Studio 2008 转换的解决方案在 Visual Studio 2010 中的 Gacutil 后期构建步骤失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13828723/

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