gpt4 book ai didi

visual-studio-2010 - Visual Studio 2010生成文件锁定问题

转载 作者:行者123 更新时间:2023-12-03 11:56:35 24 4
gpt4 key购买 nike

我有一个“升级”到Visual Studio 2010的Visual Studio 2008项目。自升级以来,该项目一直存在很多问题(我可能会添加一个在2008年仍然是部队的项目)。

第一个问题是构建主可执行文件会锁定该可执行文件,从而导致进一步的重建失败。在一个相关的问题Visual Studio locks output file on build中对此进行了描述:在这里我找到了解决方法:

if exist "$(TargetPath).locked" del "$(TargetPath).locked"
if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"

除了这种解决方法只能正常工作一次。然后,.locked文件也会被devenv.exe锁定,并且必须将其移动。我一直在通过添加.1.locked,.2.locked等来解决此问题。唯一一次删除锁以便删除文件的时间是在关闭devenv.exe时(在用户界面后需要几秒钟消失,则可以删除文件)。

不必使用调试器导致此问题的事实表明2010构建系统存在一个非常严重的问题。

我认为我可以打折的一些理论:
  • 防病毒或其他后台任务:如果这是一个问题,则似乎2008年将失败。但是,作为最完整的我删除了avast!系统完全没有运气。

  • 更新:在没有防病毒和备份实用程序的计算机上,该项目具有相同的症状。办公室中的计算机运行的是XP SP3 32位,我的本地计算机是Windows 7 64位。这似乎与操作系统无关。
  • 调试器正在锁定文件:要重现此文件,所需的一切只是重复构建过程而无需调试。 ProcessExplorer显示devenv.exe是锁的持有者,而不是vshost,并且杀死vshost.exe并不会删除锁。

  • 文件被锁定后,我开始出现第二个问题:表单设计器停止加载,并显示“找不到程序集”错误。我怀疑这些与早期锁定问题有关,因为设计人员在构建之前就将其解雇,但是进行任何更改和重建将导致所有设计人员因该错误而崩溃(即使是我已经打开并处于当前 View 的错误)。

    只因您将“dummy = 1”更改为“dummy = 2”,而其中的“dummy”却只在完全不相关的程序集中强制重新编译,所以观看接近白色错误屏幕的表单是可惜的。

    更新:我已经尝试了其他一些补救措施:未选中启用.NET源代码步进,因此这不是问题。删除.SUO(解决方案用户选项)的时间很长,只要重新启动通常可以解决问题(两个版本:第一个版本是因为没有锁定的文件,第二个版本是因为有一个锁定的文件,但是可以通过脚本重命名) )。
    Error   28  Unable to copy file "obj\Debug\PolicyTracker3.exe" to "bin\Debug\PolicyTracker3.exe". 
    The process cannot access the file 'bin\Debug\PolicyTracker3.exe' because it is being used by another process.

    最佳答案

    在为此发布补丁之前,我有以下解决方法。只需使用"C:\MyBin\VisualStudioLockWorkaround.exe" "$(TargetPath)"之类的东西(将MyBin替换为您放置可执行文件的位置)即可进行调用。

    将其创建为C#控制台应用程序,并以与原始预构建重命名相同的方式在“预构建”部分中使用(有关详细信息,请参见原始问题的顶部)。

     using System;
    using System.IO;

    namespace VisualStudioLockWorkaround
    {
    class Program
    {
    static void Main(string[] args)
    {
    string file = args[0];
    string fileName = Path.GetFileName(file);
    string directory = Path.GetDirectoryName(args[0]);
    if (!Directory.Exists(directory)) //If we don't have a folder, nothing to do.
    {
    Console.WriteLine(String.Format("Folder {0} not found. Exiting.", directory));
    return;
    }
    if (!File.Exists(file)) //If the offending executable is missing, no reason to remove the locked files.
    {
    Console.WriteLine(String.Format("File {0} not found. Exiting.", file));
    return;
    }
    foreach (string lockedFile in Directory.EnumerateFiles(directory, "*.locked"))
    {
    try //We know IOExceptions will occur due to the locking bug.
    {
    File.Delete(lockedFile);
    }
    catch (IOException)
    {
    //Nothing to do, just absorbing the IO error.
    }
    catch (UnauthorizedAccessException)
    {
    //Nothing to do, just absorbing the IO error.
    }
    }

    //Rename the executable to a .locked
    File.Move(file, Path.Combine(directory, String.Format("{0}{1:ddmmyyhhmmss}.locked", fileName, DateTime.Now)));
    }
    }
    }

    关于visual-studio-2010 - Visual Studio 2010生成文件锁定问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3095573/

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