如何根据开发人员的操作系统架构在Visual Studio中复制文件?

Wal*_*t D 5 .net msbuild visual-studio

我正在使用Visual Studio 2015编写C#应用程序.此应用程序以"任何CPU"为目标(未启用"首选32位"选项),这意味着应用程序将编译为将在32位模式下运行的单个构建目标64位操作系统上的32位操作系统和64位模式.

此应用程序要求将某个本机DLL复制到其输出文件夹(即bin/Debug或bin/Release文件夹).此DLL有单独的x86和x64版本,需要根据开发人员的操作系统将正确的版本复制到输出文件夹.

到目前为止,我已经发现我可以通过在我的.csproj文件中添加如下内容来有条件地将文件复制到输出文件夹:

<ItemGroup Condition="MY CONDITION HERE">
    <Content Include="MyNativeLib.dll">
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,我如何编写一个等同于"开发人员的操作系统是x86"或"... x64"的条件?

(要非常明确,我不是要问如何在平台构建目标上有条件地复制文件,在我的情况下总是"任何CPU".我问如何根据操作系统架构有条件地复制文件哪个Visual Studio恰好正在运行.)

Wal*_*t D 2

感谢对上面原始问题的一些有用的评论,它们为我指明了正确的方向,我已经找到了解决这个问题的方法:

我决定在构建后事件中复制该文件,并使用批处理脚本命令来检查PROCESSOR_ARCHITECTUREPROCESSOR_ARCHITEW6432环境变量。(有关这些变量的更多信息请参见此处。)

以下是如何在构建后事件中执行此操作的示例:

set isX64=FALSE
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" set isX64=TRUE
if "%PROCESSOR_ARCHITEW6432%"=="AMD64" set isX64=TRUE
if "%isX64%"=="TRUE" (
    echo "Copying x64 dependencies..."
    copy "$(ProjectDir)Dependencies\x64\MyNativeLib.dll" "$(TargetDir)"
) ELSE (
    echo "Copying x86 dependencies..."
    copy "$(ProjectDir)Dependencies\x86\MyNativeLib.dll" "$(TargetDir)"
)
Run Code Online (Sandbox Code Playgroud)

想必我也可以在 .csproj 文件中使用这些环境变量,就像我在最初的问题中考虑的那样,但在构建后事件中这样做对我来说似乎更容易和更清晰,而且我已经在使用构建后来复制一些其他文件。