每次启动Visual Studio 2010时,它都会在我启动它时在当前工作目录中创建一个名为"Visual Studio 2010"的目录.它刚刚开始这样做,它忘记了我的所有工具栏设置等等.
我显然在某处设置了不正确的设置,但我找不到它.
在工具\选项\项目和解决方案\一般我有:
项目地点:
D:\ ian
用户项目模板位置:
M:\ Visual Studio 2010\Templates\ProjectTemplates
用户项模板位置:
M:\ Visual Studio 2010\Templates\ItemTemplates
我如何阻止这个虚假的.\ Visual Studio 2010目录正在创建并告诉它在M:\上使用正确的目录?
编辑:由于我已经开始对此表示赏心悦目,请合理,不要发布不回答问题的建议.例如,不要说'你试过重新安装吗?' 或者"你试过删除所有设置吗?" 谢谢你的理解.
当我使用toUseExplorerTheme在TVirtualStringTree.PaintOptions它绘制这样的选择:

请注意,选择从控件的左侧延伸到任何节点标题的最右侧范围的位置; 选择的宽度都相同.
我希望它看起来像这个图像(其他人的项目,使用Virtual TreeView),其中选择仅涵盖节点标题的文本:

除非Virtual TreeView中有回归(我使用5.2.2),否则这一定是可能的,但我找不到正确的选项组合.
这是我的设置代码:
fTree := TVirtualStringTree.Create(Self);
fTree.Parent := Self;
fTree.Align := alClient;
fTree.OnGetText := TreeGetText;
fTree.OnInitNode := TreeInitNode;
fTree.OnInitChildren := TreeInitChildren;
fTree.OnChange := TreeSelectionChange;
fTree.RootNodeCount := 1;
fTree.DrawSelectionMode := smBlendedRectangle;
fTree.TreeOptions.PaintOptions := fTree.TreeOptions.PaintOptions
+ [toUseExplorerTheme];
fTree.TreeOptions.SelectionOptions := fTree.TreeOptions.SelectionOptions
+ [toMultiSelect];
Run Code Online (Sandbox Code Playgroud) 一个特定的VCL应用程序崩溃,很少,显然是自发的,我强烈怀疑这是因为主窗体的窗口句柄正在重新创建,以响应操作系统的一些外部触发器.
我确实知道,如果主窗体的窗口句柄要改变,那么肯定会出现麻烦(因为后台线程将消息发布到此句柄).
但我想知道如何在我开始修改代码之前重现这个bug,如果只是这样我可以确认这是崩溃的原因,症状与报告的那些匹配,并且代码变化确实解决了它.(如果操作系统无法触发呼叫,TCustomForm.RecreateWnd我需要找到崩溃的其他解释.是的,我可以发布CM_RECREATEWND到主表单,但这只是问题.)
(我知道将消息从后台线程发布到VCL线程的正确方法是创建一个纯粹用于此目的的隐藏消息窗口AllocateHWnd- 这是我提出的修复方法.)
我已经看到了一个类似的错误,通过将桌面样式从Windows XP更改为Windows Classic来触发TCustomListView其中的后代.但我还没有找到这样的方法来触发a .(我花了相当多的时间阅读VCL代码,但我必须遗漏一些东西.)RecreateWndRecreateWndTCustomForm
摘要:
在从操作系统是什么刺激并VCL的最终调用RecreateWnd一个TCustomForm?(如果这有所不同,我对Windows 7特别感兴趣.)
如果操作系统有这样的刺激,我可以证明它是否会导致观察到的症状.如果肯定没有,那么我可以证明窗口娱乐不是原因.
我已经非常失望并且收到的申请在某些情况下至少要慢100倍,我必须很快(几周)向我们的客户发布.
通过一些非常简单的分析,我发现瓶颈是它使用.NET Remoting在Windows服务和图形前端之间传输数据 - 两者都在同一台机器上运行.
微软的指导方针说"尽量减少往返行程并避免繁琐的接口":写道
MyComponent.SaveCustomer("bob", "smith");
Run Code Online (Sandbox Code Playgroud)
而不是
MyComponent.Firstname = "bob";
MyComponent.LastName = "smith";
MyComponent.SaveCustomer();
Run Code Online (Sandbox Code Playgroud)
我认为这是我们应用程序中问题的根源.不幸的是,调用MyComponent.*(分析器显示99.999%的时间花在这些语句中)在源代码中大量分散,我看不出按照上面的指导方针重新设计界面的任何希望.
编辑:事实上,大多数情况下,前端从MyComponent读取属性而不是写入它.但我怀疑MyComponent可以随后在后端进行更改.
我查看是否可以一次性从MyComponent读取所有属性,然后在本地缓存它们(忽略上面任何时候的更改问题),但这将涉及更改数百行代码.
我的问题是:他们是否可以尝试提高性能的"快速赢家"?
我需要至少100倍的加速.我是一名C/C++/Delphi程序员,除了我在过去几天所读到的内容之外,我对C#/ .NET/Remoting非常不熟悉.我正在寻找可以在几天内完成的事情 - 代码的重大重组不是一种选择.
对于初学者,我已经确认它正在使用BinaryFormatter.
(对不起,这可能是一个可怕的问题,如果我排除所有可行的选择,我怎么能切实修复X ......但我很绝望!)
编辑2 回应理查德的评论如下:我认为我的问题归结为:
当我在TFS 2010中将用户故事从一个迭代移动到另一个迭代时,我必须手动更新每个子任务中的迭代.否则,它会保留先前的迭代值,并且各种报告和过滤器不会产生预期的结果.
任何人都可以推荐一种方法或扩展,它可以使任务迭代自动与其用户故事迭代保持同步,或者失败,可以根据需要对产品中的所有用户故事/任务执行此操作吗?
HTTP 1.1 RFC(2616)的第19.3节"容忍应用程序"说明了从HTTP客户端应用程序解析日期的主题:
如果HTTP标头错误地携带带有GMT以外时区的日期值,则必须使用最保守的可能转换将其转换为GMT.
两个问题:
这是否意味着服务器必须将非GMT日期值转换为GMT?或者它是否意味着如果(可选)它选择将非GMT日期值转换为GMT(而不是拒绝它),那么它必须使用最保守的可能转换?
什么是"最保守的可能转换"?
编辑虽然现在这是一个老问题,但如果有人知道,我仍然有兴趣知道答案.
我想在已经使用多年的记录TMyValue中修复设计缺陷,我迫切希望在记录本身中修复它 - 避免更改公共接口 - 并且不要求使用记录的代码进行更改.
本质上,缺陷是TMyValue在创建时必须初始化为零,否则在其上调用Clear方法可能会导致崩溃.这是因为它包含一个字段,如果指针是非nil,则该字段是指向动态分配的内存的指针,而Clear则导致释放动态内存.
如果在堆栈上创建TMyValue,则会出现问题,因为堆栈变量在创建时不会自动归零.
我以为我可以使用记录构造函数将记录清零,但记录构造函数不能无参数.据推测,这意味着当在堆栈上创建记录时,您无法强制执行记录构造函数.
我怀疑我的问题的答案是"它无法完成".请证明我错了!
lpSecurityAttributes passed to CreateNamedPipe()?The MSDN documentation for CreateNamedPipe() says:
lpSecurityAttributes [in, optional]
A pointer to a SECURITY_ATTRIBUTES structure that specifies a security descriptor for the new named pipe...
Emphasis mine. Does 'new' mean new named pipe, or new instance of the named pipe? It goes on to say:
Remarks
To create an instance of a named pipe by …
我使用Delphi XE2构建了下面的代码.它创建Form1,Form1立即创建Form2的实例.当我按下Form2上的按钮时,将创建第二个Form2.
现在,如果我将鼠标悬停在第二个,最上面的Form2上的按钮上,并等待工具提示出现,工具提示出现的那一刻,第一个 Form2来到前面,窃取焦点.
只有在出现问题Application.MainFormOnTaskbar的True.它还依赖于从Form1 FormCreate方法创建的第一个Form2 .如果我使用PostMessage()延迟创建第一个Form2直到应用程序完成初始化,问题就会消失.
我想知道为什么会这样.我已经知道Delphi的Application对象处理很多事情,包括提示显示,我知道Delphi可以在初始化期间重新创建一个窗口的句柄,但是我无法通过这个来完全解释上述行为(或者确实上述两个事实是否相关).
Project1.dpr
program Project1;
uses
Vcl.Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True; // False makes problem go away
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Run Code Online (Sandbox Code Playgroud)
Unit1.pas
unit Unit1;
interface
uses
Vcl.Forms, Unit2;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
public
procedure CreateForm2;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
CreateForm2;
end;
procedure TForm1.CreateForm2;
var
frm …Run Code Online (Sandbox Code Playgroud) 在保存时,编辑器FooEdit(称为FooEdit)使用ReplaceFile()来确保保存操作实际上是原子的,并且如果出现任何错误,则将保留光盘上的原始文件。(ReplaceFile()的另一个重要优点是文件身份的连续性-创建日期和其他元数据。)
FooEdit还使用仅FILE_SHARE_READ的共享模式来打开文件的句柄,以便其他进程可以打开文件,但在FooEdit可以打开文件的同时不能写入文件。
“显然”,在执行ReplaceFile操作时必须短暂关闭此句柄,这允许在FooEdit重新建立它的FILE_SHARE_READ锁句柄之前,另一个进程可以打开具有写访问权的文件的竞争。
(如果FooEdit在调用ReplaceFile()之前没有关闭其FILE_SHARE_READ句柄,则ReplaceFile()将失败,并出现共享冲突。)
我想知道解决这场比赛的最简单方法是什么。这些选项似乎是找到另一种方法来锁定与ReplaceFile()兼容的文件(我看不出这是怎么可能的)或复制ReplaceFile()的所有行为,而是使用现有的文件句柄来访问目标文件而不是路径。我对如何从用户代码中自动执行ReplaceFile()的所有操作有些困惑(无论如何,重新实现ReplaceFile()似乎是个坏主意)。
这肯定是一个普遍的问题,所以可能有一个我错过的明显解决方案。
(此问题似乎相关,但是没有答案:在Windows上以事务方式写入文件更改。)
这是一个最小的可验证示例,显示了我要实现的目标(UTC时间13:18 30/9/2015更新)。您必须提供三个文件名作为命令行参数,所有文件名都在同一卷上。第一个必须已经存在。
我总是从ReplaceFile()得到共享冲突。
#include <Windows.h>
#include <stdio.h>
#include <assert.h>
int main(int argc, char *argv[])
{
HANDLE lock;
HANDLE temp;
DWORD bytes;
if (argc != 4)
{
puts("First argument is the project file. Second argument is the temporary file.");
puts("The third argument is the backup file.");
}
/* Open and lock the project file to make sure no one else can modify it */
lock = CreateFile(argv[1], GENERIC_READ | GENERIC_WRITE, …Run Code Online (Sandbox Code Playgroud) delphi ×4
delphi-xe2 ×4
windows ×2
.net ×1
atomicity ×1
c# ×1
dacl ×1
file-io ×1
http ×1
http-headers ×1
named-pipes ×1
performance ×1
remoting ×1
rfc2616 ×1
security ×1
tfs ×1
tfs-workitem ×1
tfs2010 ×1
winapi ×1
z-order ×1