Delphi 10 Seattle 引入了 Winapi.Security.pas。我尝试升级的项目(一个包)已经有一个 Security.pas 文件。除了从项目的范围名称列表中删除 Winapi(巨大不良链式 react )之外,有没有办法告诉 IDE 和编译器使用项目的 Security.pas 文件而不是 Winapi.Security .pas?
我已经尝试将项目重命名为 Security.pas,但这会导致编译器产生更多问题,生成与它所提示的代码无关的错误,所以这是一个我现在不想下去的老鼠洞。该项目在 XE7、FWIW 中构建得很好,因此这不是由于项目中的任何代码更改所致。
更新:
- 重命名文件和使用单元别名不起作用。
- 软件包的编译器行为与应用程序不同。
最佳答案
看起来这实际上可能与 Winapi.Security
单元有关,而不是像您在问题中建议的那样通用。例如,以下包可以正常编译:
package Package1;
requires
rtl;
contains
Windows in 'Windows.pas'; // blank unit named Windows.pas in project folder
end.
请注意,我和您一样,将 Winapi
包含在项目的单元范围名称列表中。
另一方面,这个包无法编译:
package Package1;
requires
rtl;
contains
Security in 'Security.pas'; // blank unit named Security.pas in project folder
end.
编译器失败并显示:
[dcc32 Error] Package1.dpk(7): E2200 Package 'rtl' already contains unit 'Winapi.Security'
如果问题纯粹与单元范围名称相关,那么两个包要么都会编译,要么都会失败。因此,我的结论是 Winapi.Security
存在一些问题。
我找不到 Winapi.Security
的源代码。我想知道它到底是什么。 [Nicholas Ring 为我在 rtl\win\winrt
目录中找到了源代码。]
无论如何,我认为是时候提交 QP 报告了。下面无法编译的包可能是该 QP 报告的起点。 [您提交的报告在这里 RSP-12469 .]
在我看来,很明显,如果您想采用西雅图,短期内您必须重新命名您的单位。
FWIW,这里有一些其他单元的行为与 Winapi.Security
相同:
Winapi.ApplicationModel
Winapi.CommonTypes
Winapi.Devices
Winapi.Foundation
Winapi.Gaming
Winapi.Globalization
Winapi.GraphicsRT
Winapi.Management
Winapi.Media
Winapi.Networking
Winapi.Storage
Winapi.UI
Winapi.WebRT
这些都是新添加的 WinRT 单元,我认为它们很重要。
关于delphi - 如何告诉 Delphi 在 DXS 中使用本地项目的 Security.pas 文件而不是 Winapi.Security.pas?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32750178/