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恰好正在运行.)
感谢对上面原始问题的一些有用的评论,它们为我指明了正确的方向,我已经找到了解决这个问题的方法:
我决定在构建后事件中复制该文件,并使用批处理脚本命令来检查PROCESSOR_ARCHITECTURE和PROCESSOR_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 文件中使用这些环境变量,就像我在最初的问题中考虑的那样,但在构建后事件中这样做对我来说似乎更容易和更清晰,而且我已经在使用构建后来复制一些其他文件。
| 归档时间: |
|
| 查看次数: |
801 次 |
| 最近记录: |