395

在构建我的 VS2012 C# 项目期间,我不断收到此错误

Error   41  Could not copy "obj\Debug\WeinGartner.WeinCad.exe" to
 "bin\Debug\WeinGartner.WeinCad.exe". 
 Exceeded retry count of 10. Failed.    


Error   42  Unable to copy file "obj\Debug\WeinGartner.WeinCad.exe" to
"bin\Debug\WeinGartner.WeinCad.exe". The process cannot access the file
'bin\Debug\WeinGartner.WeinCad.exe' because it is being used by another 
process.    

现在我发现杀死进程

Weingartner.WeinCad.vhost.exe

有效(有时),但这让我很紧张。有什么办法可以完全阻止这种情况的发生?

我的调试器设置是

在此处输入图像描述 在此处输入图像描述

4

65 回答 65

474

我在 Visual Studio 2013 中遇到过类似的错误消息。

大多数情况下,我发现这种情况发生在调试过程因异常而停止时。

当 clean+build 没有为我解决这个问题时,我通过执行以下操作取得了成功:

  • 关闭 Visual Studio
  • 删除binobj文件夹,以及
  • 重新打开 Visual Studio。

这个“错误”自 Visual Studio 2003 以来就存在。

最后,我还发现我通常可以通过简单地重命名可执行文件然后删除它来解决这个问题。

于 2013-10-31T15:04:27.300 回答
110

在 Visual Studio Premium 2013(更新 3)中,我使用预构建单线解决了这个问题:

(if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb)

这会优雅地删除任何旧的 PDB 文件(如果可以的话),然后重命名任何带有.old.pdb扩展名的文件。一个不错的副作用是,如果旧的 PDB 仍处于锁定状态,它只会在文件名中添加另一个 .old 片段,并且在您下次重新启动 Visual Studio 并进行构建时,它们都会被清除。

例如,构建/调试会话 1 保持MyProject.pdb锁定状态。
下次构建时:
MyProject.pdb-->MyProject.old.pdb

然后,构建/调试会话 2 启动,两者 MyProject.pdbMyProject.old.pdb仍然被锁定:
MyProject.old.pdb--> MyProject.old.old.pdb
MyProject.pdb-->MyProject.old.pdb

最后,重新启动 Visual Studio 并重新构建将摆脱这两者,并像往常一样继续该过程。

于 2014-08-11T20:22:57.327 回答
88

这是因为您已经关闭了应用程序,但它仍在后台运行。

临时解决方案:

  • 转到任务管理器 ( Ctrl++ Alt) Esc
  • 转到进程选项卡并找到“YourProjectName.exe”。
  • 如果找不到您的进程,请选中“显示所有用户的进程”。
  • 结束处理它。

永久解决方案:您必须通过编码关闭您的应用程序。这是代码...

System.Windows.Forms.Application.Exit();

您必须将此代码以所有形式放入表单的关闭事件中。例子:

private void frm_menu_FormClosing(object sender, FormClosingEventArgs e)
{
    System.Windows.Forms.Application.Exit();
}
于 2014-10-22T11:17:26.507 回答
26

the .vhost.exe is a debugger process, so it appears that the process being debugged hasn't closed properly. Chances are you have a bug that's keeping it alive and are not stopping the debug process correctly - there are options to detach from the process when you click 'stop debugging' instead of actually killing the debugger so maybe you have that set.

But that's the problem - the file you're trying to copy over is locked (ie still being used) by the OS so its preventing the copy. Ensure that file is free and you'll be able to copy.

于 2013-08-07T12:07:48.213 回答
25

我已经通过在任务管理器中杀死 IISExpress 来解决它

于 2014-01-15T18:50:04.490 回答
22

问题是调试器/构建器创建的可执行文件或库被防病毒软件识别为威胁,因此在执行之前将其删除。

您最好调整您的防病毒软件,使其不分析您的项目文件夹。


一些做到这一点的方法,从最好到最差,是:

  1. 从防病毒软件中排除您的项目文件夹
  2. 排除 pdb 文件(不是 100% 保证的修复)
  3. 关闭实时保护(不推荐)
于 2014-06-17T14:38:15.983 回答
15

通过提供以下预构建操作,我能够解决此问题(VS 2010);

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

if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"
于 2015-07-24T14:01:29.850 回答
13

引用:

一种解决方法是将其放在 >project 的 Pre-build event 命令行属性中(在 build Events 选项卡中):

代码片段

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

if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"
于 2016-05-03T09:11:01.357 回答
9

例外

在 Visual Studio 中的某些情况下,当您在 运行IISExpress 之上(构建 || 重新构建)时,您会遇到此异常:

无法将文件“obj\Debug\YourProjectName.dll”复制到 bin\YourProjectName.dll”。该进程无法访问文件“bin\YourProjectName.dll” ,因为它正被另一个进程使用

解决方案

  1. 右键单击需要构建的 web 项目。
  2. 点击属性。
  3. 选择左侧的构建事件选项卡。
  4. 在 Pre-build events 命令行中粘贴以下 2 行:
tasklist /fi "imagename eq iisexpress.exe" |find ":" > nul
if errorlevel 1 taskkill /f /im "iisexpress.exe"

你很好2 GO!

于 2016-04-09T15:25:08.270 回答
7

请按照以下步骤操作

  1. 打开任务管理器(Ctrl + Alt + Delete)
  2. 性能选项卡下选择选择 < ProjectNameOfYours.exe >。
  3. 单击结束进程。
  4. 现在构建解决方案。

以上步骤永久解决了错误:)

于 2018-01-30T03:50:47.403 回答
6

我想我解决了它删除了Break all processes when one process breaks调试选项中的复选标记(操作的第一个屏幕截图->第二个选项)。
自从我取消选中它以来,它一直在构建/运行良好。
我在我的项目中使用 MySql NET 连接器和 DevExpress 控件。可能是其中一个没有很好地处理连接、绑定等,因为这个标志被激活了。

编辑:绝对有效!不再有“无法复制文件”,也不再有表单设计器错误。

于 2015-06-23T15:31:26.017 回答
6

杀死进程 w3wp.exe (IIS) 通常可以解决这个问题。
通常,您可以通过导航到 bin 文件夹并尝试将其删除来了解锁定文件的进程。如果另一个进程正在使用它,将弹出的错误消息将包含需要终止的进程的名称。

于 2015-08-03T12:38:42.727 回答
6

似乎通过更改项目的程序集名称可以解决问题。

所以代替这个

在此处输入图像描述

我把它改成这个

在此处输入图像描述

请注意,我只是将其从 更改Increment and RecallIncrement_Recall,我只是删除了空格。它现在对我来说很好。

于 2015-10-19T05:06:31.007 回答
5

我的 10 美分贡献。

我在 VS 2015 Update 2 上偶尔也会遇到这个问题。

我发现切换编译目标可以解决问题。

试试这个:如果你在 DEBUG 中切换到 RELEASE 并构建,然后回到 DEBUG。问题消失了。

斯特凡诺

于 2016-03-01T07:04:05.580 回答
4

我在 Windows 8 上的 VS 2012 版本 11.0.60610.01 更新 3 上遇到了同样的问题

没有打开设计器窗口,该项目是一个简单的控制台应用程序。

大多数情况下,访问文件的 vshost 进程的删除不起作用,因为该进程没有访问文件。

最简单且耗时最少的解决方法是从解决方案中删除项目,在解决方案中构建另一个项目,然后将原始项目添加回来。

这是一种刺激和浪费时间,但它是我所知道的所有其他选择中最便宜的。

希望这可以帮助...

于 2013-09-26T00:02:16.677 回答
4

添加主项目 taskkill /f /fi "pid gt 0" /im "YourProcess.vshost.exe" 的预构建事件

于 2015-11-12T16:17:13.287 回答
4

如果所有答案都不起作用,请尝试这个简单的检查。查找运行并保存您的项目 EXE 的任何 MSbuild.exe。杀死 MSBuild.exe,你应该很高兴。

于 2018-04-23T13:01:20.727 回答
3

我无法提供防止这种情况发生的解决方案,但您至少可以重命名锁定的文件(Windows 资源管理器或经典命令窗口),然后编译/构建。无需重启或重启 VS201x。有了一些经验,您可以添加一个预构建脚本来删除旧文件或重命名,然后在有锁的情况下不碍事。

于 2014-04-10T15:34:37.033 回答
3
  1. 打开项目属性 [菜单 > 项目 > 属性]
  2. 选择“调试”选项卡
  3. 取消选中“启用 Visual Studio 托管进程”
  4. 开始调试 [F5]
  5. 您将收到安全警告,只需“确定”即可。让应用程序运行
  6. 停止调试。
  7. 检查选项“启用视觉工作室托管过程”,在调试选项卡下,
  8. 现在,尝试开始调试,你不会再看到错误了

[为我工作]

于 2016-05-07T23:10:08.327 回答
2

我终于如何解决它。为什么第一次调试后我们不能继续调试,因为第一个调试的 exe 仍在运行。因此,在第一次调试后,您需要转到任务管理器 -> 进程选项卡 -> [您的项目名称 exe] 结束 exe 进程。

这个对我有用 :)

于 2014-06-06T09:55:06.633 回答
2

请参阅其他答案。基本上,您可以让 MSBuild.exe 进程在使用资源文件的后台运行。如果您有任何导致 MSBuild 通过命令行启动的构建前或构建后任务,请尝试将“/nr:false”标志添加到此命令。但同样,请参阅上一个答案以获取更多具体细节。

于 2014-05-20T19:59:27.213 回答
2

就我而言,它是Resharper Unit Tests运行器(加上NUnit 测试,MsTests 从来没有这样的问题)。杀死进程后,能够重建进程,而无需重新启动操作系统或 VS2013。

其他测试运行器,如xUnit可能会导致相同的问题。

那么有帮助的是检查您是否可以添加 Dispose 模式,例如,如果您正在添加 DbFixture 并且数据库联系人未正确处理。即使测试完成,这也会导致程序集文件被锁定。

请注意,您可以将 IDisposable 接口添加到 DbFixture 并让 IntelliSense 添加 Dispose 模式。然后,处理相关的包含属性并将它们显式分配给 null。

这将有助于以干净的方式结束测试并在测试结束后立即解锁相关的锁定文件。

示例(xUnit 测试使用 DBFixture):

public class DbFixture: IDisposable
{
    private bool disposedValue;
    public ServiceProvider ServiceProvider { get; private set; }
    
    public DbFixture()
    {
        // initializes ServiceProvider
    }
    
    
    protected virtual void Dispose(bool disposing)
    {
        if (!disposedValue)
        {
            if (disposing)
            {
                // dispose managed state (managed objects)
                ServiceProvider.Dispose();
                ServiceProvider = null;
            }

            // TODO: free unmanaged resources (unmanaged objects) and override finalizer
            // TODO: set large fields to null
            disposedValue = true;
        }
    }

    // // TODO: override finalizer only if 'Dispose(bool disposing)' has code to free unmanaged resources
    // ~DbFixture()
    // {
    //     // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
    //     Dispose(disposing: false);
    // }

    public void Dispose()
    {
        // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
        Dispose(disposing: true);
        GC.SuppressFinalize(this);
    }
}

测试类本身需要相同的模式 - 它需要自己的 Dispose 方法(如上面的 DbFixture 类所示):

   public SQL_Tests(ITestOutputHelper output)
    {
        this.Output = output;
        var fixture = new DbFixture(); // NOTE: MS Dependency injection framework didn't initialize when the fixture was a constructor param, hence it is here
        _serviceProvider = fixture.ServiceProvider;
    } // method

所以它需要_serviceProvider在自己的 Dispose 方法中释放其本地属性,因为测试类构造函数SQL_Tests实例化了它。

于 2015-01-15T14:16:51.973 回答
2

@Geoff(https://stackoverflow.com/a/25251766/3739540)的答案很好,但在重新编译时会抛出错误代码 1。

这对我有用(2>nul 1>nul 结束 + 出口 0):

(if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb) 2>nul 1>nul
(if exist "$(TargetDir)*old.dll" del "$(TargetDir)*old.dll") & (if exist "$(TargetDir)*.dll" ren "$(TargetDir)*.dll" *.old.dll) 2>nul 1>nul
exit 0
于 2015-06-19T06:06:11.710 回答
2

我注意到一些答案解决了我的问题,但是,以防万一有人遇到和我一样的问题。

如果您正在运行控制台应用程序:在您做任何其他事情之前。

确保您已关闭任何可能已从先前版本中打开的控制台窗口。例如,我只是在控制台应用程序中测试一些代码,我没有意识到我之前运行程序时的控制台窗口是打开的。在我调试的那个会话期间,窗口被推到后面,我看不到它。只是说,这可能是您的问题,因此请检查以确保不是问题所在。

于 2015-08-08T08:31:20.093 回答
2

您可以通过脚本终止应用程序。

如果您的应用程序名为myapp.exe,请在终端中运行下一个脚本:

taskkill /IM myapp.exe /F

参数是:

/IM   application name (imagename)

 /F                     Specifies to forcefully terminate the process(es).
于 2020-12-12T08:21:41.803 回答
2

如果您正在调试 T4 模板,那么这种情况总是会发生。我的解决方案(在 MS 修复此问题之前)将只是终止此过程:

任务管理器 --> 用户 --> T4VSHostProcess.exe

此过程仅在您调试 T4 模板时出现,而不是在您运行模板时出现。

于 2016-02-19T09:52:08.857 回答
2

这是一个绝对摆脱这个问题的脚本:

REM   This script is invoked before compiling an assembly, and if the target file exist, it moves it to a temporary location
REM   The file-move works even if the existing assembly file is currently locked-by/in-use-in any process.
REM   This way we can be sure that the compilation won't end up claiming the assembly cannot be erased!

echo PreBuildEvents 
echo  $(TargetPath) is %1
echo  $(TargetFileName) is %2 
echo  $(TargetDir) is %3   
echo  $(TargetName) is %4

set dir=C:\temp\LockedAssemblies

if not exist %dir% (mkdir %dir%)

REM   delete all assemblies moved not really locked by a process
del "%dir%\*" /q

REM   assembly file (.exe / .dll) - .pdb file and eventually .xml file (documentation) are concerned
REM   use %random% to let coexists several process that hold several versions of locked assemblies
if exist "%1"  move "%1" "%dir%\%2.locked.%random%"
if exist "%3%4.pdb" move "%3%4.pdb" "%dir%\%4.pdb.locked%random%"
if exist "%3%4.xml.locked" del "%dir%\%4.xml.locked%random%"

REM Code with Macros
REM   if exist "$(TargetPath)"  move "$(TargetPath)" "C:\temp\LockedAssemblies\$(TargetFileName).locked.%random%"
REM   if exist "$(TargetDir)$(TargetName).pdb" move "C:\temp\LockedAssemblies\$(TargetName).pdb" "$(TargetDir)$(TargetName).pdb.locked%random%"
REM   if exist "$(TargetDir)$(TargetName).xml.locked" del "C:\temp\LockedAssemblies\$(TargetName).xml.locked%random%"

REM PreBuildEvent code
REM   $(SolutionDir)\BuildProcess\PreBuildEvents.bat  "$(TargetPath)"  "$(TargetFileName)"  "$(TargetDir)"  "$(TargetName)"

REM References:
REM   http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx
REM   http://stackoverflow.com/a/2738456/27194
REM   http://stackoverflow.com/a/35800302/27194

需要从每个 VS 项目预构建事件中调用该脚本。

$(SolutionDir)\BuildProcess\PreBuildEvents.bat  "$(TargetPath)"  "$(TargetFileName)"  "$(TargetDir)"  "$(TargetName)"

在此处输入图像描述

于 2016-03-07T10:59:47.463 回答
1

这个问题是查找以下错误时的第一个结果:

无法复制文件“...”,因为找不到它。

在 Visual Studio 2013(更新 3)中构建时。

解决方案:卸载 Visual Studio 2013 中的“Productivity Power Tools”。

https://connect.microsoft.com/VisualStudio/feedback/details/533411

于 2014-08-07T13:50:27.933 回答
1

我没有意识到我仍然连接着我的调试器并试图在同一个 Visual Studio 实例中构建。一旦我停止调试器,我就能够构建。

于 2015-02-13T00:50:59.133 回答
1

杀死vstest.executionengine.exe进程可以在 90% 的情况下为我解决这个问题。如果这不起作用,那么也可以杀死QTAgent32.exe,然后删除相关项目的 /bin 和 /obj 文件夹。

这是我工作日中最烦人的部分。:)

于 2015-06-09T20:30:29.683 回答
1

对我来说,是 Avast 防病毒软件不会让 Visual Studio 写入/读取/执行文件。所以我不得不将 Visual Studio 2010/2012 文件夹添加到防病毒排除列表中。就在那个baam之后......它起作用了。

于 2015-07-01T01:29:22.980 回答
1

@Gerard 的回答是正确的。

当 clean+build 没有为我解决这个问题时,我通过执行以下操作取得了成功:

Closing Visual Studio
Deleting the bin and obj folders, and
Reopening Visual Studio.

但我需要在控制台中做一些额外的工作:

> Add-Migration Initial
> Update-Database

然后我开始调试,它工作。

于 2019-06-19T09:24:37.317 回答
1

确保关闭所有实例wcfSvcHost 并重试。它对我有用!

于 2015-07-16T02:52:11.333 回答
1

在我的情况下,VS 无法复制的文件是 .Task 项目的文件,所以问题是我在本地运行了一些计划任务。一旦我停止并禁用它们,复制问题就消失了。

于 2017-11-01T17:11:36.570 回答
1

就我而言,这是一个许可问题。我必须以管理员身份运行 Visual Studio。

于 2018-08-01T14:08:34.530 回答
1

将此添加到预先构建的:

(if exist "$(TargetDir)*old.exe" del "$(TargetDir)*old.exe") & (if exist "$(TargetDir)*.exe" ren "$(TargetDir)*.exe" *.old.exe)
于 2017-07-20T13:48:25.377 回答
1

我找到了一个完整的解决方案!

大多数答案都告诉您要终止该进程,但是对于进程黑客,我找不到任何答案。

我找到了一个相对简单的解决方案。

  1. 在表单设计器中选择您的主表单。
  2. 单击属性菜单上的事件选项卡。
  3. 双击事件 FormClosing。这会自动生成事件系统和函数:

private void [your form name here]_FormClosing(object sender, FormClosingEventArgs e)

  1. 在这个函数里面,添加Application.Exit

像这样:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    Application.Exit();
}

有用的图片

在此处输入图像描述

在此处输入图像描述

我希望这有帮助!这个问题真的很坑!

修复 2

打开一项名为“应用程序体验”的服务。

于 2018-03-03T21:38:01.257 回答
1

您必须在关闭后终止该进程。我把它修好了;

Process.GetCurrentProcess().Kill();

将此代码添加到您用于关闭的关闭事件或方法中。

于 2020-10-03T12:08:45.937 回答
1

我正在开发一个微服务项目解决方案,我需要同时运行两个项目,当两个正在运行的项目的 lunchsettings.json applicationurl: {portNo} 部分是相同的端口时,就会发生冲突

第一个项目的 lunchsettings.json

...
"Project#1": {
  ...
  "applicationUrl": "http://localhost:5001",
  ...
}

第二个项目的 lunchsettings.json

...
"Project#2": {
  ...
  "applicationUrl": "http://localhost:5001",
  ...
}

要解决这个问题

第一个项目的 lunchsettings.json

...
"Project#1": {
  ...
  "applicationUrl": "http://localhost:5001",
  ...
}

第二个项目的午餐设置.json

...
"Project#2": {
  ...
  "applicationUrl": "http://localhost:5002",
  ...
}
于 2019-03-21T17:50:46.883 回答
1

有时它无法清除 DEBUG 文件夹。我所做和工作的是重命名无法删除的文件。因此,删除所有无法删除的文件夹和文件,重命名为,例如“_old”。

于 2019-01-14T10:51:56.627 回答
1

我已经多次添加了相同的问题,但这种款待的答案都无济于事,或者如果他们这样做了,那就是使用了令人讨厌的解决方法。
我认为发生这个问题总是有充分的理由(而且不是微软的错误!-虽然,VS 可以更好地标记它:-))。

主要原因可能只是你的项目依赖搞砸了!
作为一个简单的例子():

  • 您在同一个解决方案中有多个项目
  • 您清理 + 构建所有内容并假设一切顺利,因为您没有看到任何错误
  • 您开始运行其中一个项目 - 到目前为止一切顺利!
  • 然后开始运行第二个,但是这个有上一个项目也使用的依赖项并尝试重建它们
  • 然后挂了一段时间
  • 它无法构建,因为第一个项目已经在运行,并且不允许您覆盖正在进行的流程

现在您可以考虑所有可能触发此类错误的情况:

Error Could not copy "obj\Debug\ProjectX.exe" to "..\bin\Debug\ProjectX.exe". Exceeded retry count of 10. Failed. The file is locked by: "ProjectX (17132)" ProjectX

解决此问题通常是一个乏味的过程,因为您必须完全了解系统中的所有依赖项

于 2019-10-23T15:11:46.663 回答
0

如果我使用 VS2012 在 WP8 上编辑 Xaml 页面,我每次部署时都会得到这个。

我需要要么不打开 Xaml 页面,要么使用进程资源管理器来终止进程 XDesProc.exe。

如果您遇到此错误,那么我建议您使用进程资源管理器查看发生了什么(即使这是一个不同的问题)。只需找到进程“WeinGartner.WeinCad.exe”,它应该会显示进程并处理访问文件(至少在杀死 vhost 文件不能解决问题时)。

于 2014-05-21T08:15:03.963 回答
0

另一个kludge,呃,但它很容易并且在VS 2013中对我有用。单击项目。在属性面板中应该有一个名为 Project File 的条目,其中包含一个值

(您的项目名称).vbproj

更改项目名称 - 例如在末尾添加 -01。被锁定的原始 .zip 文件仍然存在,但不再被引用……因此您的工作可以继续。下次重新启动计算机时,该锁定将消失,您可以删除错误文件。

于 2015-02-26T04:48:03.903 回答
0

删除 Bin 文件夹内的 Debug 或 Release 文件夹下的所有 .cache 文件。

于 2015-03-31T21:13:27.020 回答
0

检查任务管理器是否有任何运行 .exe 的进程

于 2014-11-21T15:52:05.150 回答
0

我在 VS 2015 中遇到了这个问题。我的环境的原因是使用 StyleCop 项目设置为 StyleCopAdditionalAddinPaths Include="..." 指定额外的 StyleCop 插件路径。我使用的解决方法是从 .csproj 文件中删除此项目设置,而是在 StyleCop.CSharp.Rules.dll 所在的位置手动复制 StyleCop AddIn。这不是一个优雅的解决方案,但我发现该解决方案在执行此操作后从未锁定 dll。

于 2015-07-05T21:50:59.640 回答
0

我正在疯狂地试图找出为什么System进程在我正在使用的 EXE 上保持一个打开的句柄,在它被终止后一分钟,我得到了与 OP 相同的错误。

原因是以前的开发人员没有将IDisposable对象包装在using(){}. 一旦IDisposable对象正确地自行销毁,错误就不再发生,我能够立即重建。

于 2017-05-25T20:11:21.713 回答
0

我意识到这只是增加了这个问题已经大量的答案,但认为值得一提的是,虽然不是完美的,但以下给出的答案的组合:@Stefano、@MichaelRibbons 和 @IvanFerrerVilla 提供了一些不错的答案成功,当他们都不是很成功的时候。

于 2017-07-29T03:15:22.063 回答
0

这发生在我使用IL Support插件时。

当您的项目中没有任何 IL 文件时(例如,因为您删除了最后一个文件),构建将失败,如问题中所述。

删除对 IL 的支持解决了该问题

于 2016-02-04T15:03:38.077 回答
0

Reset IIS, stop services which are using your DLL (maybe console app or windows services hosted app or IIS) and then try.

It worked for me.

于 2016-03-15T01:03:29.687 回答
0

最快的方法是更改​​ Build 配置类型并再次返回到以前的配置。

于 2016-01-08T11:41:08.470 回答
0

我也遇到了这个。事实证明,我一直在使用我自己构建的服务进行测试,该服务正在用完我的解决方案中一个项目的 ..\bin\release 目录。我已经让服务运行,但我忘记在返回测试之前停止/卸载它。结果,它保留了我引用的其中一个 dll,需要将其从一个项目的 bin/release 子文件夹移动(自动作为依赖项)到另一个。停止服务解决了这个问题。

于 2015-07-28T04:52:49.713 回答
0

就我而言(Windows 10、Visual Studio 2015):

任务管理器 -> 用户 -> EndTask=>vshost.exe

(它会立即重新启动,您可以再次构建)

于 2015-11-15T17:50:35.750 回答
0

如果您使用 Visual Studio Code (vsCode) 遇到此问题和/或您坚持使用终端命令,则clean命令将删除构建文件并通常修复描述的问题:

dotnet clean

然后,您可以返回运行:

dotnet build

或者

dotnet run
于 2020-11-12T23:25:49.327 回答
0

我在 Visual Studio 2010 中也定期遇到此问题。关闭 Visual Studio,删除binobj目录,然后重新启动将在一次构建中修复它。然后问题又回来了。我已经在这个线程上尝试了所有其他答案,但没有一个对我有用。对我来说永久解决此问题的唯一方法是转到项目设置并关闭“启用 Visual Studio 托管进程”,构建,将其重新打开,然后再次构建。

于 2016-04-14T14:13:27.017 回答
0

花了几个小时试图解决这个问题,然后发现我正在开发一项服务 - 请记住停止任何服务作为解决方案的一部分!

于 2017-10-12T13:30:26.047 回答
0

使用 DNN。我通过编辑 MSBuild.Community.Tasks.Targets 文件并更改 bin 路径解决了这个问题:

<MSBuildDnnBinPath Condition="'$(MSBuildDnnBinPath)' == ''">$(MSBuildProjectDirectory)\bin</MSBuildDnnBinPath>
于 2016-12-12T19:43:48.963 回答
0

我设法通过以管理员身份运行 Visual Studio 来解决这个问题。

于 2019-05-28T16:09:21.190 回答
0

在尝试构建主要 WinForms (XAF) 项目时,我遇到了错误消息。我只能执行一次应用程序,然后需要关闭 VS2015 IDE 并重新启动,然后才能执行重建。在项目的属性页中进行了一些挖掘后 - 在“调试”属性页中,选中了一个复选框 - 启用 Visual Studio 托管进程。我取消选中并重新启动了 IDE,现在正在构建应用程序,但没有“无法复制 {project}.exe”消息。

Visual Studio 托管过程的目的是什么?

于 2016-04-06T23:13:06.397 回答
0

就我而言,Visual Studio 2105 远程调试器是问题所在。当我在任务管理器中终止此任务时,我能够在 Visual Studio 中成功重建我的应用程序。

于 2016-06-09T16:09:48.670 回答
0

使用 Ms Process Explorer 找出您需要在 Windows 7 中打开“应用程序体验”

就我而言,所有其他建议均无效(Windows 7、VS2019

编译后,生成的 .EXE 文件被可重现地锁定了大约一分钟。另一个奇怪的现象:删除 .EXE 文件时,它像往常一样在文件资源管理器中消失,但在刷新 (F5) 时又重新出现。

您可以使用MS Process Explorer查看是否有任何进程拥有您生成的 .EXE 文件的句柄。为此,请查看 Process Explorer 的“下部窗格”,选择查看句柄而不是 DLL,然后使用“查找”搜索您的 .EXE 文件。

这向我表明这是在 .EXE 上获得句柄的Windows 7“系统”进程。

然后一些研究表明,我必须打开 Windows“应用程序体验”服务(“自动启动”)才能永久摆脱这种奇怪的行为。


以下是更多信息: 系统进程(PID 4)在哪些情况下保留打开的文件句柄?

于 2021-11-24T09:21:00.890 回答
0

我遇到了同样的问题,我尝试了这里提到的很多不同的方法,但没有一个对我有用,唯一对我有用的解决方案:

  1. 从我的解决方案的 DEBUG 文件夹中删除只读属性和

  2. 将此添加到构建事件:如果存在 "$(TargetPath).locked" del "$(TargetPath).locked" 如果不存在 "$(TargetPath).locked" 如果存在 "$(TargetPath)" move "$(TargetPath) " "$(TargetPath).locked"

于 2016-11-14T05:40:02.050 回答
0

就我而言,我无法发布到无法访问的文件夹。您可以通过尝试发布到您的 C 驱动器中的一个文件夹来排除这种情况,您不应该在访问该文件夹时遇到问题。

于 2021-11-10T21:14:37.540 回答
-1

转到工具>>选项>>数据库工具>>常规检查脚本/查询执行

于 2015-01-13T07:46:44.887 回答
-3

利用

Debug.Flush();
Debug.Close();

如果发生异常,在 catch 或 finally 块中。

编辑: 我个人遇到了这个问题,我通常会做一个技巧并且效果很好。我将构建类型从“调试”更改为“发布”(如果已经存在,则将“发布”更改为“调试”)。

于 2014-03-14T07:49:36.230 回答