Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何在Visual Studio中复制文件取决于开发人员';s的操作系统架构?_.net_Visual Studio_Msbuild - Fatal编程技术网

.net 如何在Visual Studio中复制文件取决于开发人员';s的操作系统架构?

.net 如何在Visual Studio中复制文件取决于开发人员';s的操作系统架构?,.net,visual-studio,msbuild,.net,Visual Studio,Msbuild,我正在使用Visual Studio 2015编写一个C#应用程序。此应用程序以“任何CPU”(未启用“首选32位”选项)为目标,这意味着该应用程序将编译为单个构建目标,在32位操作系统上以32位模式运行,在64位操作系统上以64位模式运行 此应用程序要求将某个本机DLL复制到其输出文件夹(即bin/Debug或bin/Release文件夹)。此DLL有单独的x86和x64版本,根据开发人员的操作系统,需要将正确的版本复制到输出文件夹 到目前为止,我已经发现我可以通过在.csproj文件中添加以

我正在使用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运行的操作系统体系结构有条件地复制文件。)

多亏了对上述原始问题的一些有益的评论,这些评论为我指明了正确的方向,我已经找到了解决这个问题的方法:

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

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

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文件中使用这些环境变量,就像我在原始问题中所想的那样,但在后期构建事件中使用这些变量对我来说似乎更容易、更清晰,而且我已经在使用后期构建来复制一些其他文件。

我会在后期构建事件中正确地使用。@AllanS.Hansen是的,这是我的第一直觉(我已经使用后期构建复制了一堆其他文件);我就是找不到任何关于在构建后事件中有条件地复制文件的技巧,不管是什么操作系统架构。如果有人能告诉我如何在后期构建事件中做到这一点,那将是100%可以接受的!看看这个:@Alex谢谢!$(PROCESSOR_ARCHITECTURE)变量看起来很有希望。我会调查的!请随时向我们通报您的进展情况。