如何根据开发人员的操作系统架构在 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_ARCHITECTURE
和PROCESSOR_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 应用程序?