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

标签 .net visual-studio msbuild

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

此应用程序要求将某个 native 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 恰好正在运行。)

最佳答案

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

我决定在构建后事件中复制该文件并使用批处理脚本命令来检查 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 文件中使用这些环境变量,因为我在原始问题中考虑过这样做,但是在构建后事件中执行它对我来说似乎更容易和更清晰,而且我已经在使用构建后复制一些其他文件。

关于.net - 如何根据开发人员的操作系统架构在 Visual Studio 中复制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37383213/

相关文章:

testing - 使用 TFS2008 构建服务器构建 VS2010 项目

c# - 哪些结构使用 .NET 4 中的 ThreadPool?

.net - 使用 .NET 远程更改 Windows 用户密码

visual-studio - Xamarin 应用程序调试时出现空白屏幕

c++ -/bin/sh : pkg-config: command not found

msbuild - NUnit 和 NAnt 的 future 考虑因素

c# - 从表中获取 auto_increment id

.net - "SHUTDOWN is in progress"的 SqlError.Number 是什么?

visual-studio - 使用 WriteCodeFragment MSBuild 任务

visual-studio - 如何找出 Visual Studio 发送到 MSBuild 的命令?