GrapeVine Voice: RAD Studio OTA Issue
This post talks about a RAD Studio OTA issue.
I thought it was a CBC bug at first. However, after debugging I am sure it is another OTA bug.
Now all projects are MSBuild based. Therefore a Delphi project contains a .dproj wrapper and a real .dpr or dpk project file. The bug happens if these two files have different names. Then you cannot get a correctly string from IOTAProject.ProjectOptions.TargetName.
The workaround is also easy that I parse the .dproj file directly to locate the .dpr or .dpk file. The code is,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public static string GetProjectTarget(IOTAProject project) {
if (project != null) {
String targetName = project.ProjectOptions.TargetName;
if (project.Personality == OTAIDEPersonalities.sDelphiDotNetPersonality
|| project.Personality == OTAIDEPersonalities.sDelphiDotNetPersonality)
{
string folder = Path.GetDirectoryName(targetName);
string file = Path.GetFileName(OtaUtils.GetDelphiProjectFileName(project.FileName));
return Path.ChangeExtension(Path.Combine(folder, file), Path.GetExtension(targetName));
}
return targetName;
}
return null;
}
public static string GetDelphiProjectFileName(string project)
{
string content = File.ReadAllText(project, Encoding.UTF8);
Match m = regex.Match(content);
Debug.Assert(m.Success);
string file = m.Groups["source_name"].Value;
return Path.Combine(Path.GetDirectoryName(project), file);
}
readonly static Regex regex = new Regex(
".+)\">\\s* +
"urce>MainSource\\s*",
RegexOptions.CultureInvariant
| RegexOptions.Compiled
);
I will fire a bug report to QC tomorrow. Oh, that would be Chinese New Year Eve
(Update: This bug is logged as QC#57890. And it applies to both Delphi for Win32 and .NET DLL/BPL projects. Strangely it does not affect EXE projects.)
© Lex Li. All rights reserved. The code included is licensed under CC BY 4.0 unless otherwise noted.
Advertisement