如何从C#项目的构建事件中访问Visual Studio解决方案级平台?

Kei*_*ill 12 c# 64-bit post-build-event 32bit-64bit visual-studio

我们有一个大型的VS 2010解决方案,主要是C#代码,但有一些本地DLL,各种C#项目依赖(包括我们的单元测试DLL).我们正在尝试支持32位和64位版本的库.所以我们现在将本机DLL构建为32位和64位.问题是我们的很多C#项目都有后期构建事件,它们将所需的本机DLL复制到项目的TargetDir中.现在我们有两个不同版本的本机DLL(32位和64位),我需要能够指定正确的dir来复制本机DLL.我原本以为我可以简单地在路径中使用$(Platform),如下所示:

copy $(SolutionDir)\NativeDll\$(Platform)\$(Configuration) $(TargetDir)
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为$(Platform)是项目的平台,而不是解决方案级平台.在这种情况下,$(平台)是"任何CPU".从我所看到的C#项目中的后期构建事件宏看,似乎没有办法访问正在构建的解决方案级平台.有没有更好的方法来实现我的目标?

Dan*_*rod 3

我相信解决方案的平台与项目的平台不同,只是文本。

我过去所做的是:

  1. 从解决方案中删除 Win32 和“混合平台”(并在添加项目后继续这样做)。

  2. 将所有 C# DLL 设置为在解决方案平台 AnyCPU、x86、x64 中构建为 AnyCPU。(如果您希望能够在 Blend 中打开或者解决方案中有任何纯托管应用程序,请不要删除 AnyCPU。)

  3. 将 C# EXE 和单元测试设置为在 x86 解决方案平台中构建于 x86 中,在 x64 解决方案平台中构建于 x64 中,而根本不在 AnyCPU 解决方案平台中构建。

  4. 当解决方案为 x86 并输出到 $(ProjectDir)\bin\x86$(Configuration) 时,将所有本机设置为在 Win32 中构建,并且中间与路径中的 obj 而不是 bin 相同。x64 与 x64 相同,而不是 x86 和 Win32。

  5. 设置 C# EXE 和单元测试的预构建事件,以从项目配置名称的相对路径复制它们所依赖的本机 DLL:$(Config)

  6. 设置单元测试的类初始化以将测试 bin 目录的全部内容(当然是正确的平台和配置)复制到测试的输出目录。使用 if #DEBUG 和 unsafe sizeof(IntPtr) 来告诉在哪里查找测试的 bin 目录。

  7. 手动(使用记事本)添加到解决方案外部使用解决方案部署位置中的 x86/x64 程序集的 .csproj 文件的相对引用路径,因此路径将包括 $(Platform) 和 $(Configuration),并且不会针对每个用户。

Microsoft:Visual Studio 中更好的 32/64 位支持将真正到位。