如何使用沙盒控制台应用程序Visual Studio 2012停止.exe的文件锁定

时间:2015-10-25 00:14:26

标签: c# visual-studio visual-studio-2010 visual-studio-2012

我认为这是我提出的唯一技术挑战,我还没有找到解决问题的方法。

使用Visual Studio 2012专业版,也发生在Visual Studio 2010中,我使用简单的ConsoleApplication来测试代码,完成编码测试,使用便笺簿或Sandbox。对于我的生活,我无法阻止错误:

错误12无法将文件“obj \ x86 \ Debug \ ConsoleApplication.exe”复制到“bin \ Debug \ ConsoleApplication.exe”。该进程无法访问文件'bin \ Debug \ ConsoleApplication.exe',因为它正由另一个进程使用。 ConsoleApplication

错误11无法将“obj \ x86 \ Debug \ ConsoleApplication.exe”复制到“bin \ Debug \ ConsoleApplication1.exe”。超过重试次数10.失败。 ConsoleApplication1

我有Process Explorer,每次尝试关闭句柄时都会得到以下内容:

enter image description here

所以每次我做一个简单的代码更改,主要退出后我的Console.Application.exe被锁定,我必须坐在那里等待一两分钟才能真正重建代码更改并测试< /强>

有没有办法阻止这种情况发生,主线程自己处理处理,所以尝试手动处理,如Application.Exit是徒劳的,请参阅here

class Program
{


    static void Main(string[] args)
    {
        var numbers = GetUniqueRandoms(new Random(), 10, 100);

        Console.WriteLine("Numbers before selection sort:");
        foreach (var number in numbers)
        {
            Console.Write("{0},", number);
        }
        Console.WriteLine();
        //selection sort
        var pos_min = 0;
        for (var i = 0; i < numbers.Length - 1; i++)
        {
            pos_min = i;
            for (var j = i + 1; j < numbers.Length; j++)
            {
                if (numbers[j] < numbers[i])
                    pos_min = j;
            }

            if (pos_min != i)
            {
                var temp = numbers[i];
                numbers[i] = numbers[pos_min];
                numbers[pos_min] = temp;
            }
        }

        Console.WriteLine("Numbers after selection sort:");
        foreach (var number in numbers)
        {
            Console.Write("{0},", number);
        }

    }

    static int[] GetUniqueRandoms(Random random, int count, int max)
    {
        var result = new List<int>(count);
        var set = new HashSet<int>();
        for (var i = 0; i < count; i++)
        {
            int num;

            do
            {
                num = random.Next(1, max);
            } while (!set.Add(num));

            result.Add(num);
        }
        return result.ToArray();
    }
}

3 个答案:

答案 0 :(得分:1)

不是真正的解决方案

好的,这是预构建脚本。 %Date%move的解析取决于本地化,可能对您不起作用。键是For /f "Tokens=2,3,4 Delims=/. " %%i In ("%Date%") Do @( Set Month=%%j& Set Day=%%i& Set Year=%%k ) set ActDate=%Year%_%Month%_%Day% For /f "Tokens=1,2,3 Delims=/.:, " %%i In ("%Time%") Do @( Set Hour=0%%i& Set Min=%%j& Set Sec=%%k ) set ActTime=%Hour:~-2,2%-%Min%-%Sec% move c:\\Users\\Antonˇn\\Desktop\\evidence\\EvidenceSolution\Evidence\bin\Debug\evidence.exe c:\\Users\\Antonˇn\\Desktop\\evidence\\garbage\%ActDate%__%ActTime%__evidenceDebug.exe move c:\\Users\\Antonˇn\\Desktop\\evidence\\EvidenceSolution\Evidence\bin\Release\evidence.exe c:\\Users\\Antonˇn\\Desktop\\evidence\\garbage\%ActDate%__%ActTime%__evidenceRelease.exe echo 0 命令,程序集文件被移走,编译器很高兴。

$ cat FLOW009.c
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv)
{
    char aline[100];
    int t;
    int quantity;
    int price;

    FILE *fh = fopen("FLOW009.txt", "rt");
    if (fh == NULL) {printf("open failed"); exit(1);}

    if (fgets(aline, 80, fh) != NULL) {
        sscanf(aline, "%d", &t);
        if (t < 1 || t > 1000) {
            printf("ERROR: Value of t, %d, is outside the range 1 to 1000\n", t);
            exit(1);
        }

        while (fgets(aline, sizeof(aline), fh) != NULL) {
            sscanf(aline, "%d %d", &quantity, &price);
            if (quantity > 0 && price <= 100000) {
                printf("%.6f\n", (float)quantity * (float)price);
            } else {
                printf("ERROR: Quantity and price are not within accepted limits.\n");
            }
        }
    }

    exit(0);
}

答案 1 :(得分:0)

@AntoninLejesk回答是一个很好的尝试,但对我没有用。我在这里找到了一个很好的答案:Visual Studio 2010 build file lock issues

您创建了一个名为&#34; VisualStudioLockWorkaround&#34;的VisualApplication.exe。并在你的预构建脚本中调用exe,传递目标路径,像魅力一样工作,最大程度上是@Godeke的解决方案。

答案 2 :(得分:0)

以上讨论的解决方案均不适用于我。 我不知道如何,但是重新启动计算机可以挽救我的生命。