【发布时间】:2011-07-16 20:41:22
【问题描述】:
这是我目前正在做的:
protected void setupProject()
{
bool lbDone = false;
int liCount = 0;
while (!lbDone && liCount < pMaxRetries)
{
try
{
pProject.ProjectItems.Item("Class1.cs").Delete();
lbDone = true;
}
catch (System.Runtime.InteropServices.COMException loE)
{
liCount++;
if ((uint)loE.ErrorCode == 0x80010001)
{
// RPC_E_CALL_REJECTED - sleep half sec then try again
System.Threading.Thread.Sleep(pDelayBetweenRetry);
}
}
}
}
现在我在大多数对 EnvDTE 内容的调用中都有 try catch 块,它运行良好。我遇到的问题是当我遍历一个集合并对每个项目执行一次操作时。
foreach(ProjectItem pi in pProject.ProjectItems)
{
// do something to pi
}
有时我在foreach(ProjectItem pi in pProject.ProjectItems) 行中遇到异常。
由于我不想在收到 RPC_E_CALL_REJECTED 异常时重新开始 foreach 循环,所以我不确定我能做什么。
编辑回答评论: 是的,我正在从另一个程序自动化 VS,是的,我通常同时将 VS 用于其他东西。我们有一个读取 xml 文件的应用程序,然后基于 xml 文件生成大约 50 个 VS 解决方案。这通常需要几个小时,因此我会在此期间尝试做其他工作。
【问题讨论】:
-
这是一个丑陋的低级错误。这里有什么不寻常的地方?您是否从另一个程序而不是加载项自动化 VS?运行此程序时,您是否确保 VS 处于空闲状态?
-
@Hans - 我已经用我的回复更新了问题。
-
Hmya,进程外自动化和“尝试做其他工作”是这里的真正原因。为什么不直接启动另一个 VS 实例?
-
@Hans,为什么不回答这个问题?
-
@Ben - 因为那不是他想要的。可以理解,提问者对此有些脾气暴躁。
标签: c# visual-studio-2010 code-generation