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

标签 visual-studio-2010

我有一个“升级”到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/

    相关文章:

    visual-studio-2010 - 平均。 Visual Studio 测试中的测试时间(秒)

    visual-studio-2010 - 在 Visual Studio 2010 上调试 MS 测试时出现 "Downloading public symbols"?

    visual-studio-2010 - 如何在VS2010中为XAML禁用智能感知?

    c# - F5 发出噪音不运行,Ctrl+F5 运行正常,F11 的行为与 F5 完全一样?

    sql-server-2008 - 是否可以在 SQL Server 2008 上部署 SSIS 2012 包

    c# - 在OpenCV和C#上获取RGB颜色值

    C++关闭和打开线路

    windows - 如何在我的 Visual Studio 安装项目中运行外部安装程序

    tfs - 当前迭代是否有TFS查询宏?

    database - visual studio 2010数据库项目,有没有可视化的方法?