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

Posted

技术标签:

【中文标题】如何根据开发人员的操作系统架构在 Visual Studio 中复制文件?【英文标题】:How to copy a file in Visual Studio conditional upon the developer's operating system architecture? 【发布时间】:2016-09-19 20:59:54 【问题描述】:

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

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

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

<ItemGroup Condition="MY CONDITION HERE">
    <Content Include="MyNativeLib.dll">
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
</ItemGroup>

所以我的问题是,我该如何写一个相当于“开发者的操作系统是 x86”或“... x64”的条件?

(非常清楚,我不是询问如何根据平台构建目标有条件地复制文件,在我的情况下始终是“任何 CPU”。我在询问如何根据运行 Visual Studio 的操作系统架构有条件地复制文件。)

【问题讨论】:

我会在后期构建事件中正确地做到这一点。 @AllanS.Hansen 是的,这是我的第一直觉(我已经使用 post-build 复制了一堆其他文件);我根本找不到任何关于在构建后事件中有条件地复制文件的提示,更不用说以操作系统架构为条件了。如果有人能在构建后的活动中告诉我如何做到这一点,那将是 100% 可以接受的! 看看这个:***.com/questions/3832552/… @Alex 谢谢! $(PROCESSOR_ARCHITECTURE) 变量看起来很有希望。我会调查的! 请随时告知我们您的进度。 【参考方案1】:

感谢对上述原始问题的几个有用的 cmets 为我指明了正确的方向,我已经想出了如何解决这个问题:

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

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

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)"
)

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

【讨论】:

以上是关于如何根据开发人员的操作系统架构在 Visual Studio 中复制文件?的主要内容,如果未能解决你的问题,请参考以下文章

前后端分离微服务架构如何设计

如何在不使用 chrome 开发人员工具的 Visual Studio Code 中调试 Angular 应用程序?

如何快速开发一个简单实用的MES系统?

如何使用 Visual Studio 2019 开发人员命令提示符禁用 /Qspectre

Visual Studio2017 数据库架构比较

Visual Studio2017 数据库架构比较