我的代码如何在运行时检测它是否编译为x86或Any CPU?

5

我有很多集成测试需要从文件中读取期望结果。我的测试通过相对路径访问这些文件。x86和Any CPU的相对路径深度不同。例如,当我的测试在x86下运行时,它们需要读取以下文件"../../TestResults/MyTest.csv",但在Any CPU下它们需要访问"../TestResults/MyTest.csv"

到目前为止,在每个测试装置中我都有以下常量:

   private const string platformDependentPrefix = "";

如果我运行x86测试,我需要在每个测试装置中手动将 "" 更改为 "../"。

有没有自动化的方法?

4个回答

6

4
你想知道进程是否以64位运行,或者编译的目标是什么?
如果你想获取进程位数,你可以使用Teoman提到的IntPtr.Size方法(如果你使用的是.NET 4,则可以使用Environment.Is64BitProcess)。
如果你想要查看目标平台,我建议查看System.Reflection命名空间中的Module.GetPEKind。PortableExecutableKinds参数会根据你是否针对x86、AnyCPU或者带有Required32Bit标志的x64进行编译而有不同的值。

3

您可以使用IntPtr.Size检测当前进程运行的“位数”,将获得4字节(32位)或8字节(64位)。不存在作为任何CPU运行的情况,但您可以有#defines来允许在编译时做出决策。


3

当在X86上构建时,您可以向项目添加一个条件编译符号(项目->属性->生成),并使用它来确定您的路径。

例如:

#if X86
    path = "x86 path";
#endif

除此之外,您可能希望创建一个基本测试类,所有使用该路径的测试都继承自该类。在这个基类中,您将使用编译符号。这样,您只需要定义一次路径。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接