![](/img/trans.png)
[英]How can I get the current Active Solution Platform name for use in a Visual Studio add-in? (C#)
[英]How can you access the Visual Studio solution level platform from a C# project's build event?
我们有一个大型的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)
但这不起作用,因为$(Platform)是项目的平台,而不是解决方案级平台。 在这种情况下,$(平台)是“任何CPU”。 从我所看到的C#项目中的后期构建事件宏看,似乎没有办法访问正在构建的解决方案级平台。 有没有更好的方法来实现我的目标?
当我必须这样做时,我只是简单地将我的所有程序集构建为x86或x64而不是AnyCPU,并且有两个独立的输出包。 如果你知道你的进程必须是32位或64位prori,那么AnyCPU真的没有意义。
我相信解决方案的平台与项目不同的只是文本。
我过去的成就是:
从解决方案中删除Win32和“混合平台”(并在添加项目后继续这样做)。
将所有C#DLL设置为在解决方案平台AnyCPU,x86,x64中构建为AnyCPU。 (如果您希望能够在Blend中打开或者解决方案中有任何纯托管应用程序,请不要删除AnyCPU。)
将C#EXE和单元测试设置为在x86解决方案平台中的x86和x64解决方案平台中的x64中构建,而不是在AnyCPU解决方案平台中构建。
当解决方案是x86并将其输出到$(ProjectDir)\\ bin \\ x86 \\ $(配置)并将其设置为与路径中的obj相同而不是bin时,将所有本机设置为Win32。 x64与x64相同,而不是x86和Win32。
设置C#EXE的预构建事件和单元测试,以从项目配置名称的相对路径复制它们所依赖的本机DLL:$(Config)
设置单元测试的类初始化以复制测试bin目录的整个内容(当然是正确的平台和配置)来测试'out dir。 如果#DEBUG和unsafe sizeof(IntPtr)用于告知在哪里查找测试的bin目录。
手动(使用记事本)在解决方案之外添加从解决方案的部署位置使用x86 / x64程序集的.csproj文件的相对引用路径,因此路径将包括$(Platform)和$(Configuration),而不是每个用户。
微软:Visual Studio中更好的32/64位支持将真正到位。
我自己没有使用它,但Build - > Batch Build可能就是你想要的。 有了它,您可以构建多个平台。
http://msdn.microsoft.com/en-us/library/169az28z.aspx
当然,这实际上并不能让您访问解决方案的“平台”,但您不需要,因为您将单独构建每个平台。
更新:如果要自动构建,请创建包含以下内容的批处理文件
"c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv" ../solution.sln /rebuild "platform"
其中'platform'是“Release | Any CPU”,“Release | x86”等,并为您需要构建的每个配置重复该行。 使用配置管理器为x86和x64的构建设置每个项目,您应该拥有所需的项目。
Francesco Pretto有一个扩展,有助于此。 它似乎有一些怪癖和缺陷,但它是一个开始。
http://visualstudiogallery.msdn.microsoft.com/619d92a2-4ead-410d-a105-135f7b4b4df9
使用github上的源代码:
我不认为'Active Solution Configuration'具有等效的宏属性。
我建议在所有.csproj文件中手动添加自定义属性,如下所示(请参阅为每个配置/平台组合添加的新MyVar
自定义属性):
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
...
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
...
<MyVar>MyDebugAnyCpu</MyVar>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
...
<MyVar>MyReleaseAnyCpu</MyVar>
</PropertyGroup>
您可以使用“卸载项目”和“编辑MyProject.csproj”菜单来编辑Visual Studio中的.csprojet。 重要的是要知道即使使用普通的GUI编辑器保存它,Visual Studio也不会破坏这些“未知”值。
然后在post build事件中,您可以使用这些值,例如:
copy $(SolutionDir)\$(MyVar)\$(Platform)\$(Configuration) $(TargetDir)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.