在C ++中有预定义的宏:
#if defined(_M_X64) || defined(__amd64__)
// Building for 64bit target
const unsigned long MaxGulpSize = 1048576 * 128;// megabyte = 1048576;
const unsigned long MaxRecsCopy = 1048576 * 16;
#else
const unsigned long MaxGulpSize = 1048576 * 8;// megabyte = 1048576;
const unsigned long MaxRecsCopy = 1048576;
#endif
允许我设置常量来控制将要使用的内存量。
当然我可以逐字定义预处理器变量:
#define Is64bit 1
using System;
using System.Collections.Generic;
-later -
#if Is64bit
// Building for 64bit target
const long MaxGulpSize = 1048576 * 128;// megabyte = 1048576;
const long MaxRecsCopy = 1048576 * 16;
#else
const long MaxGulpSize = 1048576 * 8;// megabyte = 1048576;
const long MaxRecsCopy = 1048576;
#endif
我找不到基于配置管理器中设置的值来检测平台的方法,这将允许命令行构建:
set de=C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe
set sol=E:\Some\Path\to\my.sln
"%de%" %sol% /build "Release|x86"
"%de%" %sol% /build "Release|x64"
有没有办法检测到这个或者我是否需要构建,更改平台并再次构建?
答案 0 :(得分:11)
您可以将任何常量添加到.csproj
文件中。这些可以放入条件属性组中,如下所示。
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<DefineConstants>TRACE;X64</DefineConstants>
...
</PropertyGroup>
对于我的Release x64版本,我已经定义了一个我可以使用的X64常量:
#if X64
#endif
答案 1 :(得分:1)
确保您的设计考虑是否需要在编译时或运行时知道这一点。如果是编译时间,那么是的,您可能需要定义一个常量。这可以通过命令行传递,或者通过配置使用Visual Studio或MSBUILD传递。更改配置并重新构建。
如果是运行时,请搜索问题的答案,例如How to know a process is 32-bit or 64-bit programmatically ...和朋友。
但是,根据您的应用需求,这种区别也可能无关紧要。 .NET管理自己的内存,没有什么能阻止你的x86组件在64位机器上运行。如果您正在使用非托管代码,那么您的库中是否有任何外部可以告诉您您应该使用的大小,而不是假设?
答案 2 :(得分:1)
您也可以在x64平台的项目属性中定义符号(例如_x64)。打开项目的属性对话框,选择x64平台,在Build页面上,只需输入&#34; _x64&#34;进入&#34;条件编译符号&#34;框。
确保为调试和发布配置执行此操作。
答案 3 :(得分:0)
在 vb.net 项目中可以使用 PLATFORM 变量
#If PLATFORM == "x86" Then
Imports MyProxy = MyX86dll.MyClass
#Else
Imports MyProxy = MyX64dll.MyClass
#End If