46

Visual Studio Edit and Continue 功能在 Visual Studio 2010 上停止,我不知道是什么导致了问题。

我正在使用 C# 开发一个 Windows 应用程序。此应用程序最初是在 Visual Studio 2008 中开发的,后来升级到 Visual Studio 2010。

一切正常,包括编辑并继续,直到我将 .NET Framework 从 3.5 升级到 4.0。

现在,当我使用调试模式时,更改 IDE 中的任何代码行都会导致以下消息:

进行了无法编译的编辑。在修复编译错误之前无法继续执行。

实际上,没有编译错误,我必须重新启动 Visual Studio 才能运行更新。

如何让“编辑并继续”再次工作?

4

23 回答 23

45

在解决方案资源管理器视图中,右键单击引用的每个引用,选择属性。在 Properties 视图中,在 Embed Interop Types 字段中签名 False。这对我有用。

于 2011-05-19T21:31:24.357 回答
20

编辑并继续功能不适用于dynamic关键字。

我试图删除使用dynamic参数的方法,转换后的项目现在可以在 Visual Studio 2010 上运行。

互联网研究表明,这是已向 Microsoft 报告的错误。下面的链接有更多详细信息:

于 2011-01-24T13:52:31.480 回答
5

我有一些 Excel 文件"embed interop types" == true。当我将其更改为 false 时,编辑并继续开始工作。

于 2012-06-13T12:29:44.087 回答
5

我昨天使用了微软的分析器,之后我的“编辑并继续”功能消失了。经过数小时的挫折后,我终于意识到我需要从命令提示符处执行VsPerfCLREnv /globaloff 命令并重新启动计算机。现在我有我的编辑并继续未来。顺便说一句,它与目标平台无关。它适用于设置为任何 CPU 的目标平台,没有任何麻烦。

于 2012-09-22T11:38:24.240 回答
5

我知道这篇文章很旧,但我最近遇到了这个问题,这篇博客文章向我展示了如何解决它。

  • 删除obj文件夹
  • 删除bin文件夹。您可以在删除后将库、数据文件等复制并粘贴回文件夹。
  • 在 VS 中,菜单 Solutions -> Clean solution

这对我有用多次。

于 2017-10-30T06:09:05.657 回答
4

我在 Visual Studio 2013 中遇到了这个问题,并且:-

  • 有时只是关闭并重新打开解决方案就可以了,但是当它不起作用时
  • 重新启动 Visual Studio(关闭解决方案,退出 Visual Studio,重新打开 Visual Studio,重新打开解决方案,使用编辑并继续重新尝试调试)修复它。

在我的例子中,我没有嵌入任何互操作类型,我的任何代码也没有dynamic关键字,并且我执行了完整的解决方案清理但没有成功。然而,我已经运行、调试和重新启动了很多次,所以它可能与内存有关——Visual Studio 花了超过一分钟才关闭,在此期间磁盘正在抖动(大概是内存分页玩)。

于 2014-05-28T20:11:34.717 回答
2

我会尝试清除 VS 生成的所有文件。所以我会删除binobj目录,我也会删除*.suo*.user文件。由于这些文件是自动生成的,这不应该影响任何东西(尽管我显然会备份所有文件,以防万一有一些其他文件被错误地放入其中)。

有时这些文件可能会损坏(在旧的 VC++ 等中经常发生这种情况),然后 VS 会开始表现得非常有趣。

于 2011-01-24T12:52:03.013 回答
2

我尝试了上述所有解决方案,但没有一个对我有用。但是,当我在 Visual Studio 中删除 bin 和 object 文件夹并再次运行时,它开始工作。

于 2014-06-29T18:22:37.200 回答
2

在我的情况下,有人在引用列表中添加了对项目输出的引用:在解决方案资源管理器中查看 [ProjectName]\References 下的 [ProjectName*] 并将其删除。

如果项目依赖于自身副本中的代码,则不能“编辑并继续”。在警告列表中,如果这是问题的原因,您可能会或可能不会(更可能在较大的项目中)有“与导入类型冲突”消息。

于 2014-01-08T04:14:05.483 回答
2

与 VS2017 社区一起工作时,我遇到了这个更严重的问题:如果您移植现有项目,则标签EmbedInteropTypes可能还没有在 .csproj 文件中,搜索是徒劳的。如果是这种情况,请使用文本编辑器将属性组 Debug|x86(或您使用的任何一个)末尾的标记添加到 .csproj:

前:

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\x86\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <DocumentationFile>bin\Debug\MyProject.XML</DocumentationFile>
    <DebugType>full</DebugType>
    <PlatformTarget>x86</PlatformTarget>
    <ErrorReport>prompt</ErrorReport>
    <Prefer32Bit>false</Prefer32Bit>
  </PropertyGroup>

后:

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\x86\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <DocumentationFile>bin\Debug\MyProject.XML</DocumentationFile>
    <DebugType>full</DebugType>
    <PlatformTarget>x86</PlatformTarget>
    <ErrorReport>prompt</ErrorReport>
    <Prefer32Bit>false</Prefer32Bit>
    <EmbedInteropTypes>false</EmbedInteropTypes>
  </PropertyGroup>

必须对属于该解决方案 的所有项目执行此操作!

于 2018-05-09T11:23:27.707 回答
1

在 VS2013 中,我必须在调试选项中启用“使用托管兼容模式”。我认为这是因为我有一个引用 .Net 2 程序集的 .Net 4 项目。

对于同一解决方案中的另一个项目,我必须取消选中项目属性中的“定义跟踪常量”。

于 2014-08-05T02:11:00.653 回答
1

对我来说,这是由于Nuget未能将包(为 Net Framework 构建)下载到正在引用的 Net Standard 项目。Nuget 进入了一个无限循环(查看输出窗口)。

解决方案是关闭“自动包还原”设置,请参阅:https ://developercommunity.visualstudio.com/content/problem/26638/nuget-infinite-loop.html

访问此设置 工具 > 选项 > NuGet 包管理器 > 常规

于 2018-07-19T12:10:08.257 回答
1

我不得不在工具 -> 选项 -> 调试 -> 常规中取消选中“启用本机编辑并继续”:

在此处输入图像描述

于 2019-05-05T02:03:01.387 回答
1

在 Visual Studio 2015 中,我删除了 .vs 文件夹(新样式 .suo 文件所在的位置),删除了所有 bin 和 obj,还卸载了 Resharper 2015。编辑并继续回来了。

(旁注:智能感知现在几乎立即显示自动完成,而之前需要 2 到 5 秒,可能是 resharper 的错,也可能不相关......)

于 2016-01-19T10:30:52.867 回答
0

阅读以上内容,我的 UI 项目具有带有“嵌入互操作类型”的 Shell32 == true。我将其更改为 false,“编辑并继续”开始工作。

于 2012-05-01T16:04:45.880 回答
0

在解决方案资源管理器视图中,右键单击引用的每个引用,选择属性。在 Properties 视图中,在 Embed Interop Types 字段中签名 False。这对我有用。

于 2015-10-16T11:42:51.280 回答
0

我找到了我的项目在调试模式下不允许我继续和编辑的原因之一。您不能有两个具有相同文件名的 c# 文件,即使它们位于不同的文件夹和不同的名称空间中并且可能具有不同的类名。我更改了班级名称,但仍然没有解决它。您必须更改 .cs 文件名。

.Net Framework 4.8 没有这个问题,所以 .net core 添加了这个功能。

于 2021-05-11T19:19:27.780 回答
0

就我而言,有效的是在调试选项中取消选中“要求源文件与原始版本完全匹配” 。VS 社区 2017 在这里。

于 2018-06-27T22:27:43.197 回答
0

从我引用的项目的程序集版本中删除 * 为我解决了这个问题。

来自 Github:

“我使用 [assembly: AssemblyVersion(1.2.3.*")] 在 VB 和 C# 项目的混合中重现了这个问题。一旦 VB 项目引用了具有此设置的 C# 项目,事情就会开始崩溃。看起来它反过来也有同样的问题。”-rhuijben

https://github.com/dotnet/roslyn/issues/28224

(有被标记的风险,似乎十多年来我们一直在遭受 VS Edit and Continue 问题的困扰。令我震惊的是,Microsoft Visual Studio 团队在发生这种情况时并没有足够关心通过提供更详细的信息来帮助开发人员)

于 2019-07-05T17:41:11.327 回答
0

对我有用的是相似但不完全像接受的答案。由于 LINQ 查询,我创建了一个匿名类型;IE

var thingy = (from thing in things select new { thing.Property1, thing.Property2 }).First();

当我将匿名类型更改为元组时,问题就消失了:

var (thing1, thing2) = (from thing in things select (thing.Property1, thing.Property2)).First();
于 2020-10-16T15:24:36.213 回答
0

对于即使使用 Visual Studio 2017 仍然会出现此错误的人

没有动态/可移植类库/Nuget 包或依赖问题。Visual Studio 未突出显示任何错误或警告。

经过数小时尝试发布在此以及其他线程和网页中的所有解决方案后,唯一对我有用的解决方案是签入、删除工作区并Map&Get再次.

要删除工作区,Source controlAdvancedWorkspaceRemove

我正在使用最新的 Visual Studio 2017 社区,并且在新机器上进行了相对全新的安装(一周和几个工作时间)。


在上述解决方案之前我测试过的方法没有成功

  • 确保在 Visual Studio 选项中启用了编辑并继续。取消勾选并再次勾选
  • 删除解决方案中所有项目的 bin 和 obj
  • Clean and Rebuild all,重启 VS / reboot 结合以上
  • 受此启发,检查项目的编译选项和 Nuget 包和 dll 兼容性
  • 以各种组合卸载项目以测试依赖性问题或其他问题(受此启发
  • 删除解决方案并重新下载(不删除工作区)
  • 签署 False 以嵌入互操作类型
  • 设置<_ResolveReferenceDependencies>这里true解释
  • 以上与重启VS和重启的组合

在此之后,我进行了签入并将解决方案下载到另一台运行相同版本的 Visual Studio(2017 社区)的机器上。由于我在那里没有遇到 Edit&Continue 问题,所以我去了 Workspace 删除。

于 2017-12-19T23:46:35.510 回答
0

我尝试了以上所有方法,都没有奏效。这显然是由于启用了一些低级调试选项(查看寄存器...)

工具 -> 导入和导出设置 -> 重置所有设置

解决了

于 2019-08-23T07:55:24.863 回答
-1

在 VS 2015 中,此错误是由我最近安装的 nuGet 包引起的。通过卸载此软件包并重新安装,该错误已得到修复。

于 2016-09-02T01:31:55.960 回答