调试后删除的项目引用

Posted

技术标签:

【中文标题】调试后删除的项目引用【英文标题】:Project references dropped after debugging 【发布时间】:2012-06-24 20:57:42 【问题描述】:

我们最近升级到 VS2010 (10.0.40219.1 SP1Rel) 和 .net 7.1.1.4 (x64) 的 ILOG 规则。现在可能会发生以下情况:

    打开解决方案。 调试项目 停止调试。 关闭一个文件(目前为止:app.Config 和 Program.cs) 注意“重构规则”通知窗口出现。 当每个规则文件的第一个项目引用被删除时,惊恐地倒吸一口凉气。

这发生在大型解决方案中(约 60 个 csproj 和约 15 个规则)。较小的解决方案会发生这种情况(6 个 csproj 和 1 个规则)。

我们已经开始采取极端的开发措施来避免引用丢失(在调试时卸载所有规则并在调试后关闭/重新打开 VS2010)。

我们的项目或软件设置中是否有什么可以更改以阻止项目引用丢失?


更新:虽然使用调试器是解决“重构规则/引用删除”问题的可靠方法,但偶尔也会发生这种情况,只需关闭文件即可 - 不使用调试器。


我已授予第一个赏金,如果有人提出可以接受的答案,我愿意设置第二个赏金。


解决方法:我们有三个解决方案文件

    包含构建服务器所有内容的解决方案文件。 仅包含规则及其依赖项的解决方案文件。开发人员构建一次以获取规则的 .dll。 不包含规则项目的解决方案文件。需要 rulep 的 dll 的项目具有将 dll 复制到其文件夹中的预构建事件以及对该位置的程序集引用。要允许调试和发布版本,需要进行一些操作。

开发人员可以安全地调试没有规则文件供 VS 破坏的第三个解决方案。

【问题讨论】:

您在哪个 .Net 框架中运行? .Net 4? .Net 4 客户资料? 我们是 .net4(按照 ILOG 7.1.1.4 的要求)——我确保没有项目以 .net4cp 为目标 这个 DLL 是在构建期间构建的吗?换句话说,它是第三方 DLL 还是您的团队创建的? “.rulep”项目文件类似于“.csproj”项目文件。它确实构建到 DLL 并具有对 .csproj 的项目引用。我的团队创建了 rulep 文件。 【参考方案1】:

无论如何,为了更好地控制问题,也许您可​​以将您的项目/解决方案置于源代码控制之下,并配置 Visual Studio 以便它请求任何文件签出的权限? 因此,当尝试修改项目引用(或任何其他受源代码控制的文件)时,系统会询问您,并且您可以选择拒绝任何不需要的修改。

我对“.net 的 ILOG 规则”以及它存储规则配置的位置/方式一无所知,所以这种方法可能不适用于您的情况。如果是这种情况,请忽略我的回答。

【讨论】:

这当然很有帮助。我的团队已经讨论过保护源代码控制和本地磁盘副本免受损坏。即使使用只读的规则文件,VS 仍然是一个可以使用的熊。 VS 很容易崩溃... :-|并且经常做奇怪的事情......你是否尝试过禁用任何最终安装的 VS-addon/extension?也许 .net 的 ILOG 规则与某些已安装的组件/库/插件之间存在一些不兼容... 这是我们的第一反应。在使用 VisualNUnit 进行调试时,我们首先观察了该行为。在实现一般调试之前将其扔掉。现在除了 VS2010 或 ILOG 外,没有任何东西可以卸载。 我想到的唯一其他事情是:尝试向 ILOG 开发人员寻求支持/检查是否确实存在某种标志来激活 ILOG“操作日志”以了解是否有问题删除引用的 ILOG 显然,总是可以尝试在不同的计算机/安装/架构 (x32 /x64) 上尝试缩小问题的原因......或者,当其他一切都失败时,也许有人可以用WinDbg调试Visual Studio,并尝试跟踪是什么导致了问题,但是这种方法非常耗时,并且需要大量的汇编器/winApi调试经验……也许你可以尝试不同版本的VS?也许VS 2008?还是即将推出的 VS2012?也许它只是导致问题的VS中的一个错误......【参考方案2】:

我也熟悉 rulep 文件 - 但请考虑使用带有一些过滤器的 Procmon 来准确找出哪些进程正在破坏您的文件。希望这能给你更多的线索。

请注意,如果它是使用 Visual Studio 自动化 API 的 Visual Studio 插件,这可能无法帮助您缩小罪魁祸首。

【讨论】:

以上是关于调试后删除的项目引用的主要内容,如果未能解决你的问题,请参考以下文章

VS调试运行出错,某些类库项目中引用的命名空间提示不存在

怎样在.net项目中移除一个重复的引用?

怎么在.net中添加一个引用库项目的可执行项目

C#2005调试出现“没有可用于当前位置的源代码”

C#/ VS2008:为项目添加单独的调试/发布引用

从父级删除后保留的子视图控制器