我的代码如何在运行时检测它是否为x86或任何CPU编译
本文关键字:x86 任何 编译 CPU 是否 代码 检测 运行时 我的 | 更新日期: 2023-09-27 18:01:21
我有很多从文件中读取预期结果的集成测试。我的测试通过相对路径访问这些文件。相对路径对于x86和任何CPU来说都是一个层次的不同。例如,当我的测试在x86下运行时,它们需要读取以下文件"../../TestResults/MyTest.csv",但在任何CPU下,它们需要访问"../TestResults/MyTest.csv"
到目前为止,我在每个测试夹具中都有以下常量: private const string platformDependentPrefix = "";
如果我运行x86的测试,我需要手动将"更改为"..
有办法使它自动化吗?
这是一个非常粗糙的方法,但有效:
public static string Platform
{
get
{
if (IntPtr.Size == 8)
return "x64";
else
return "x86";
}
}
也可以访问CSharpProjectConfigurationProperties3.PlatformTarget
属性
您想要进程是作为64位运行还是作为编译目标运行?
如果你想要进程位,那么你可以使用IntPtr。Teoman(或Environment)提到的尺寸方法。Is64BitProcess(如果你使用。net 4).
如果你想要目标平台,我会看看模块。系统中的GetPEKind。反射的名称空间。PortableExecutableKinds out参数将具有不同的值,具体取决于您的目标是x86, AnyCPU还是x64,分别具有Required32Bit标志,no标志,PE32Plus标志集。
您可以使用IntPtr.Size检测当前进程运行的'位'。您将获得4字节(32位)或8字节(64位)。没有像任何CPU那样运行这样的东西,但是您可以为该配置使用#定义,使您能够在编译时做出决定。
您可以在X86中构建项目时添加一个条件编译符号(Project->Properties->Build),并使用它来确定您的路径。
。
#if X86
path = "x86 path";
#endif
除此之外,您可能想要创建一个基测试类,所有使用此路径的测试都从它继承。在这个基类中,您将使用编译符号。这样你只需要定义一次路径。