我们希望为我们的项目在Visual Studio 中提供两个自定义平台开关(配置管理器中的平台下拉列表)。
例如,一个用于'桌面',一个用于'Web'。然后,目标构建任务基于平台开关以自定义方式编译代码。我们不想添加到Debug Release开关,因为我们需要为每个桌面和Web平台提供这些。
我们发现尝试这种方法的一种方法是修改.csproj文件以添加类似的内容
<Platform Condition=" '$(Platform)' == '' ">Desktop</Platform>
并添加属性组,例如
<PropertyGroup Condition=" '$(Platform)' == 'Web' ">
<DefineConstants>/define Web</DefineConstants>
<PlatformTarget>Web</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'Desktop' ">
<DefineConstants>/define Desktop</DefineConstants>
<PlatformTarget>Desktop</PlatformTarget>
</PropertyGroup>
但是这仍然不起作用,编译器抛出错误
/ platform的选项'Desktop'无效;必须是anycpu,x86,Itanium或x64
那么它必须是其中一个选项,我们不能添加我们的自定义平台吗?
有没有人能够做到这一点?任何指针都会有所帮助。
更新:使用DebugDesktop和ReleaseDesktop会使用户更加复杂。因为“桌面”和“网络”实际上是平台,并且还有能力在下拉列表中添加新平台(即),我相信“平台”切换应该用于完全相同的目的。
答案 0 :(得分:5)
这个主题可能会在三年后对某些人感兴趣。我在配置构建平台时遇到了类似的困难并解决了它们。
您抛出的错误是因为PlatformTarget属性是使用Desctop设置的,而不是因为Platform属性。这两个属性有一些不同的含义。第一个真正最终指示构建过程的所有参与者应该使用哪个过程体系结构,而第二个允许在IDE内部定制构建环境。
在Visual Studio中创建项目时,默认情况下可以使用具有条件限制的PropertyGroups下的AnyCPU设置ProcessTarget属性,例如“'... | $(Platform)'=='... | AnyCPU'强>”。但它并没有强制你做同样的事情。可以使用具有其他值的AnyCPU for Platform属性轻松设置ProcessTarget属性。
考虑到上述情况,您的样本可能如下所示:
<PropertyGroup Condition=" '$(Platform)' == 'Web' ">
<DefineConstants>Web</DefineConstants>
<PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'Desktop' ">
<DefineConstants>Desktop</DefineConstants>
<PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup>
它必须正常工作。
希望它对你有用。
答案 1 :(得分:1)
您应该能够使用Configuration Manager对话框来创建新平台。
答案 2 :(得分:1)
我最近问了同样的问题,看来在Visual Studio 2010中你可以定义自己的项目平台。 (见http://blogs.msdn.com/b/vcblog/archive/2008/11/20/printf-hello-msbuild-n.aspx)。不幸的是,我们仍在使用2008年。
答案 3 :(得分:0)
也在寻找这个...但根据https://msdn.microsoft.com/en-us/library/bb629394.aspx,MSBuild引擎的唯一有效值是“Any CPU”,“x86”和“x64”。 这种定制是否真的受到支持?
答案 4 :(得分:-1)
将“Debug”和“Release”重命名为“Debug Desktop”和“Release Desktop”,并将它们复制到名称“Debug Web”和“Release Web”中。然后以这种方式设置常量。